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; }