Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:can any one tell me why my program wrong?

Posted by opensky at 2008-11-15 16:23:18 on Problem 3588
In Reply To:can any one tell me why my program wrong? Posted by:opensky at 2008-11-15 16:23:12
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<map>
using namespace std;
struct person
{
	string name,stat;
}ts;
string dlist[10101],wlist[100101],plist[100101],order,sname;
long n,m,dl,wl,pl,times;
long wa,now;
map<string ,long> dh,wh,ph;
vector <string> flist;
vector<person> cou;
inline bool cmp1 (person a,person b)
{
	return (a.name<b.name);
}
inline bool cmp2 (person a,person b)
{
	return (a.name>b.name);
}
void mem()
{
	wl=dl=pl=0;
	flist.clear();
	cou.clear();
	wa=0;
	now=0;
	dh.erase(dh.begin(),dh.end());
	wh.erase(wh.begin(),wh.end());
	ph.erase(ph.begin(),ph.end());
	dh.clear();
	ph.clear();
	wh.clear();
}
void up(long x)
{
	if (x<=1) return ;
	string t="";
	if (wa==0)
	{
		if ((x/2>=1)&&(wlist[x]<wlist[x/2]))
		{
			t=wlist[x];
			wlist[x]=wlist[x/2];
			wlist[x/2]=t;
			wh[wlist[x]]=x;
			wh[wlist[x/2]]=x/2;
			if (x/2>1)
			up(x/2);
		}
	}else
	{
		if ((x/2>=1)&&(wlist[x]>wlist[x/2]))
		{
			t=wlist[x];
			wlist[x]=wlist[x/2];
			wlist[x/2]=t;
			wh[wlist[x]]=x;
			wh[wlist[x/2]]=x/2;
			if (x/2>1)
			up(x/2);
		}
	}
}
void down(long x)
{
	if (x>=wl) return ;
	string t="";
	long best=x;
	if (wa==0)
	{
		if ((x*2<=wl)&&(wlist[best]>wlist[x*2]))
		{
			best=x*2;
		}
		if ((x*2+1<=wl)&&(wlist[best]>wlist[x*2+1]))
		{
			best=x*2+1;
		}
		if (best-x)
		{
			t=wlist[x];
			wlist[x]=wlist[best];
			wlist[best]=t;
			wh[wlist[x]]=x;
			wh[wlist[best]]=best;
			down(best);
		}	
	}else
	{
		if ((x*2<=wl)&&(wlist[best]<wlist[x*2]))
		{
			best=x*2;
		}
		if ((x*2+1<=wl)&&(wlist[best]<wlist[x*2+1]))
		{
			best=x*2+1;
		}
		if (best-x)
		{
			t=wlist[x];
			wlist[x]=wlist[best];
			wlist[best]=t;
			wh[wlist[x]]=x;
			wh[wlist[best]]=best;
			down(best);
		}
	}
}
int main()
{
	scanf("%d",&times);
	while (times--)
	{
		scanf("%d%d",&n,&m);
		wa=0;
		for (long a=1;a<=m;++a)
		{
			cin>>order>>sname;
			if (order=="Sort")
			{
				if ((sname=="desc")&&(wa==0))
				{
					wa=1;
					for (long b=1;b<=wl;++b)
					{
						up(b);
					}
				}
				if ((sname=="asc")&&(wa==1))
				{
					wa=0;
					for (long b=1;b<=wl;++b)
					{
						up(b);
						//down(a);
					}
				}
			}
			if (order=="New")
			{
				if (dl<n)
				{
					dl++;
					dlist[dl]=sname;
					dh[sname]=dl;
				}else
				{
					wl++;
					wlist[wl]=sname;
					wh[sname]=wl;
					up(wl);
				}
			}
			if (order=="Pause")
			{
				bool end=false;
				now=dh[sname];
				if (now)
				{
					dh[sname]=0;
					pl++;
					plist[pl]=sname;
					ph[sname]=pl;
					dlist[now]=dlist[dl];
					//dh[dlist[now]]=now;
					if (now!=wl)
					dh[dlist[now]]=now;
					if (wl)
					{
						dlist[dl]=wlist[1];
						wh[wlist[1]]=0;
						dh[dlist[dl]]=dl;
						wlist[1]=wlist[wl];
						wh[wlist[1]]=1;
						wlist[wl]="";
						wl--;
						if (wl>=2)
						down(1);
					}else
					{
						dlist[dl]="";
						dl--;
					}
				}
				//end=true;
				if (!now)
				{
					now=wh[sname];
					wh[sname]=0;
					pl++;
					plist[pl]=sname;
					ph[plist[pl]]=pl;
					wh[sname]=0;
					wlist[now]=wlist[wl];
					if (now!=wl)
					wh[wlist[now]]=now;
					wlist[wl]="";
					wl--;
					if (wl>=2)
					down(1);
				}
			}
			if (order=="Continue")
			{
				now=ph[sname];
				ph[sname]=0;
				if (dl<n)
				{
					dl++;
					dlist[dl]=sname;
					dh[dlist[dl]]=dl;
				}else
				{
					wl++;
					wlist[wl]=sname;
					wh[wlist[wl]]=wl;
					up(wl);
				}
				plist[now]=plist[pl];
				if (now!=pl)
				ph[plist[now]]=now;
				plist[pl]="";
				pl--;
			}
			if (order=="Finish")
			{
				now=dh[sname];
				dh[sname]=0;
				if (now)
				{
					flist.push_back(sname);
					dlist[now]=dlist[dl];
					if (wl)
					{
						dlist[dl]=wlist[1];
						dh[dlist[dl]]=dl;
						if (wl>1)
						{
							wlist[1]=wlist[wl];
							wh[wlist[1]]=1;
						}else
						{
							wh[wlist[1]]=0;
						}
						wlist[wl]="";
						wl--;
						if (wl>=2)
						down(1);
					}else
					{
						dlist[dl]="";
						dl--;
					}
				}
			}
		}
		for (long a=0;a<flist.size();++a)
		{
			ts.name=flist[a];
			ts.stat="finished";
			cou.push_back(ts);
			/*cout<<flist[a];
			printf(" finished\n");*/
		}
		for (long a=1;a<=dl;++a)
		{
			ts.name=dlist[a];
			ts.stat="downloading";
			cou.push_back(ts);
			/*cout<<dlist[a];
			printf(" downloading\n");*/
			dlist[a]="";
		}
		for (long a=1;a<=wl;++a)
		{
			ts.name=wlist[a];
			ts.stat="waiting";
			cou.push_back(ts);
		/*	cout<<wlist[a];
			printf(" waiting\n");*/
			wlist[a]="";
		}
		for (long a=1;a<=pl;++a)
		{
			ts.name=plist[a];
			ts.stat="paused";
			cou.push_back(ts);
		/*	cout<<plist[a];
			printf(" paused\n");*/
			plist[a]="";
		}
		if (wa==0) sort(cou.begin(),cou.end(),cmp1);
		else sort(cou.begin(),cou.end(),cmp2);
		for (long a=0;a<cou.size();++a)
		{
			cout<<cou[a].name;
			printf(" ");
			cout<<cou[a].stat;
			printf("\n");
		}
		printf("\n");
		if (times)
		{
			mem();
		}
	}
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator