Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 2977 | Accepted: 1092 |
Description
Input
Output
Sample Input
2 3 101 102 103 3 201 202 203 ENQUEUE 101 ENQUEUE 201 ENQUEUE 102 ENQUEUE 202 ENQUEUE 103 ENQUEUE 203 DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 2 5 259001 259002 259003 259004 259005 6 260001 260002 260003 260004 260005 260006 ENQUEUE 259001 ENQUEUE 260001 ENQUEUE 259002 ENQUEUE 259003 ENQUEUE 259004 ENQUEUE 259005 DEQUEUE DEQUEUE ENQUEUE 260002 ENQUEUE 260003 DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 0
Sample Output
Scenario #1 101 102 103 201 202 203 Scenario #2 259001 259002 259003 259004 259005 260001
Source
参考了代码,自己打了一遍:
注意:
1.头文件中的<string> <cstring>不要忘记
2.每次的Init()函数不要忘记
1 //poj 2259 Team Queue 2 #include<cstdio> 3 #include<iostream> 4 #include<queue> 5 #include<string>//不要忘记!! 6 #include<cstring> 7 using namespace std; 8 short nM[1000000];//元素映射组 9 bool flag[1005];//标记组中是否有元素 10 queue<int> q;//保存组编号 11 queue<long> nq[1005];//存储每个队列的元素 12 void Init(int n){ 13 int i,j,k; 14 //memset(nM,0,sizeof(nM)); 15 memset(flag,false,sizeof(flag)); 16 while(!q.empty()){ 17 q.pop(); 18 } 19 for(i=0;i<=n;i++){ 20 while(!nq[i].empty()){ 21 nq[i].pop(); 22 } 23 } 24 } 25 void Iuput(int n){ 26 int i,j,k,num; 27 for(i=0;i<n;i++){ 28 flag[i]=false; 29 scanf("%d",&num); 30 for(j=0;j<num;j++){ 31 cin>>k; 32 nM[k]=i;//k在队列i中 33 } 34 } 35 } 36 void Solve(int &n){ 37 string s; 38 int i; 39 cout<<"Scenario #"<<n++<<endl; 40 while(cin>>s,s!="STOP"){ 41 if(s=="ENQUEUE"){ 42 cin>>i; 43 if(!flag[nM[i]]){//该队伍中的第一个元素 44 flag[nM[i]]=true; 45 q.push(nM[i]); 46 } 47 nq[nM[i]].push(i); 48 } 49 else{ 50 int fir=q.front(); 51 cout<<nq[fir].front()<<endl; 52 nq[fir].pop(); 53 if(nq[fir].empty()){ 54 q.pop(); 55 flag[fir]=false; 56 } 57 } 58 } 59 cout<<endl; 60 } 61 int main(){ 62 //freopen("D:\\INPUT.txt","r", stdin); 63 int n,i=1; 64 while(scanf("%d",&n)&&n){ 65 Init(n); 66 Iuput(n); 67 Solve(i); 68 } 69 return 0; 70 }
原文:http://www.cnblogs.com/Deribs4/p/4370616.html