//提交未成功 #include <iostream> #include <string> #include <cstdio> #include <sstream> using namespace std; const int nMax=1005; struct Queue{ int q[nMax]; int front,rear; Queue():front(0),rear(0){} }queue[nMax]; struct Team{ int t[nMax]; int n;//n表示元素个数 Team():n(0){} }team[nMax]; int t,n; int getTeam(int x) { for(int i=0;i<n;i++) { for(int j=0;j<team[i].n;j++) if(team[i].t[j]==x) return i; } return -1; } void EnQueue(int u,int a) { queue[u].q[queue[u].front++]=a; } int DeQueue() { for(int i=0;i<n;i++) { for(int j=queue[i].rear;j<queue[i].front;j++) { return queue[i].q[queue[i].rear++]; } } return -1; } int main() { /* freopen("data.in","r",stdin); freopen("data.out","w",stdout); //*/ int cas=0; while(scanf("%d",&t) && t!=0) { cas++; printf("Scenario #%d\n",cas); for(int i=0;i<t;i++) { scanf("%d",&n); team[i].n=n; for(int j=0;j<n;j++) scanf("%d",&team[i].t[j]); } string command; while(getline(cin,command) && command!="STOP") { istringstream in(command); string oper; in>>oper; if(oper=="ENQUEUE") { int a; in>>a; int u; u=getTeam(a); EnQueue(u,a); } else if(oper=="DEQUEUE") { int a=DeQueue(); if(a!=-1) printf("%d\n",a); } } printf("\n"); } return 0; }
#include <iostream> #include <cstdio> #include <string> #include <list> using namespace std; list<int> l; int elem[1000000];//暴力求解--思想 list<int>::iterator team[1005]; int t,n; int main() { //freopen("data.in","r",stdin); int cas=0; while(scanf("%d",&t) && t) { printf("Scenario #%d\n",++cas); l.clear(); for(int i=1;i<=t;i++) { team[i]=l.end(); int n; scanf("%d",&n); for(int j=0;j<n;j++) { int a; scanf("%d",&a); elem[a]=i; } } string oper; while(cin>>oper && oper!="STOP") { if(oper=="ENQUEUE") { int b; scanf("%d",&b); if(team[elem[b]]!=l.end()) { ++team[elem[b]]; team[elem[b]]=l.insert(team[elem[b]],b); } else team[elem[b]]=l.insert(team[elem[b]],b); } else if(oper=="DEQUEUE") { int temp; temp=l.front(); if(team[elem[temp]]==l.begin())//漏写 team[elem[temp]]=l.end(); printf("%d\n",temp); l.pop_front(); } } printf("\n"); } return 0; }
#include <iostream> #include <cstdio> #include <string> #include <list> using namespace std; list<int> l; int elem[1000000];//暴力求解--思想 list<int>::iterator team[1005]; int t,n; int main() { //freopen("data.in","r",stdin); int cas=0; while(scanf("%d",&t) && t) { printf("Scenario #%d\n",++cas); l.clear(); for(int i=1;i<=t;i++) { team[i]=l.end(); int n; scanf("%d",&n); for(int j=0;j<n;j++) { int a; scanf("%d",&a); elem[a]=i; } } string oper; while(cin>>oper && oper!="STOP") { if(oper=="ENQUEUE") { int b; scanf("%d",&b); if(team[elem[b]]!=l.end()) { ++team[elem[b]]; team[elem[b]]=l.insert(team[elem[b]],b); } else team[elem[b]]=l.insert(team[elem[b]],b); } else if(oper=="DEQUEUE") { int temp; temp=l.front(); if(team[elem[temp]]==l.begin())//漏写 team[elem[temp]]=l.end(); printf("%d\n",temp); l.pop_front(); } } printf("\n"); } return 0; }
队列与队列操作的高效实现
887

被折叠的 条评论
为什么被折叠?



