Hoj 1456 Team Queue (一)

2014-11-24 02:54:19 · 作者: · 浏览: 5

团队队列。

方法一:直接用链表模拟,用STL list直接模拟。

[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

int team[1000005];

int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int t;
int cas = 0;
char cmd[20];
list q;
list final;
list::iterator last[1005];
while(scanf(" %d",&t)!=EOF && t!=0)
{
q.clear();
final.clear();
cas++;
int num,t1;

for(int i=1; i<=t; i++)
{
scanf(" %d",&num);
for(int j=0; j {
scanf(" %d",&t1);
team[t1] = i;
}
}

for(int i=1; i<=t; i++) last[i] = q.end();

printf("Scenario #%d\n",cas);

while(scanf(" %s",cmd)!=EOF && strcmp(cmd,"STOP")!=0)
{
if(strcmp(cmd,"ENQUEUE") == 0)
{
int w;
scanf("%d",&w);
if(last[team[w]]==q.end())
last[team[w]]=final.insert(final.end(),w);
else
{
last[team[w]]++;
last[team[w]]=final.insert(last[team[w]],w);
}
}
else if(strcmp(cmd,"DEQUEUE") == 0)
{
int temp = final.front();
printf("%d\n",temp);
list::iterator ti = final.begin();
if(ti == last[team[temp]])
last[team[temp]] = q.end();
final.pop_front();
}
}
printf("\n");
}
return 0;
}

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

int team[1000005];

int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int t;
int cas = 0;
char cmd[20];
list q;
list final;
list::iterator last[1005];
while(scanf(" %d",&t)!=EOF && t!=0)
{
q.clear();
final.clear();
cas++;
int num,t1;

for(int i=1; i<=t; i++)
{
scanf(" %d",&num);
for(int j=0; j {
scanf(" %d",&t1);
team[t1] = i;
}
}

for(int i=1; i<=t; i++) last[i] = q.end();

printf("Scenario #%d\n",cas);

while(scanf(" %s",cmd)!=EOF && strcmp(cmd,"STOP")!=0)
{
if(strcmp(cmd,"ENQUEUE") == 0)
{
int w;
scanf("%d",&w);
if(last[team[w]]==q.end())
last[team[w]]=final.insert(final.end(),w);
else
{
last[team[w]]++;
last[team[w]]=final.insert(last[team[w]],w);
}
}
else if(strcmp(cmd,"DEQUEUE") == 0)
{
int temp = final.front();
printf("%d\n",temp);
list::iterator ti = final.begin();
if(ti == last[team[temp]])
last[team[temp]] = q.end();
final.pop_front();
}
}
printf("\n");
}
return 0;
}
方法二:开1000个小队列,一个大队列模拟。


[cpp]
#include
#include
#include

using namespace std;

int v[1000100];
bool flag[1010];
queue q,cyr[1010];

int main()
{
int T,n,x,i,j