UVA 540 Team Queue
这题就是一个特殊的队列, 我用了vector来模拟。
题意是 有几个队伍,每个队伍中有编号为0—999999的队员。
他们根据命令行来构成队列,
ENQUEUE x 将编号为x的队员入队,若是队列中有x所属队伍的队员,则排在这些队员的最后面。
DEQUEUE 出队,将队列中排第一位的出列并输出其对应编号。
用vector模拟 不多说了。。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
const int MAXN=1000005;
int a[MAXN];
vector<int> q;
int main()
{
int n, m, i, e, k=0;
char cmd[25];
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
printf("Scenario #%d\n",++k);
for(i=0;i<n;i++)
{
scanf("%d",&m);
while(m--)
{
scanf("%d",&e);
a[e]=i;
}
}
bool flag;
while(scanf("%s",cmd))
{
if(cmd[0]=='S') break;
flag=false;
if(cmd[0]=='E')
{
scanf("%d",&e);
for(i=q.size()-1;i>=0;i--)
{
int t=q[i];
if(a[t]==a[e])
{
q.insert(q.begin()+i+1,e);
flag=true;
break;
}
}
if(!flag) q.insert(q.end(),e);
}
else if(cmd[0]=='D')
{
printf("%d\n",q[0]);
q.erase(q.begin());
}
}
puts("");
q.clear();
}
return 0;
}
浙公网安备 33010602011771号