标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1518 Accepted Submission(s): 511
1 //deque 双向队列 2 #include<cstdio> 3 #include<algorithm> 4 #include<queue> 5 #include<vector> 6 #include<map> 7 #include<cstring> 8 using namespace std; 9 #define N 1010 10 deque<int> qu[N];//保存大的队列中的出现的每个小团队 11 map<int, int> mp;//保存每个人属于哪一个团队 12 vector <int > vv;//保存大的队列中的每个小团队出现的顺序 13 void init() 14 { 15 mp.clear(); 16 for(int i =0 ;i < N ; i++) 17 { 18 qu[i].clear(); 19 } 20 vv.clear(); 21 } 22 int main() 23 { 24 int tm; 25 int cnt = 0; 26 while(~scanf("%d",&tm)&&tm!=0) 27 { 28 cnt++; 29 int rs; 30 init(); 31 for(int i = 0 ; i < tm ; i++) 32 { 33 scanf("%d",&rs); 34 for(int j= 0 ; j < rs ; j++) 35 { 36 int t; 37 scanf("%d",&t); 38 mp[t] = i; 39 } 40 } 41 char ml[10]; 42 printf("Scenario #%d\n",cnt); 43 vector <int> ::iterator it ; 44 while(~scanf("%s",ml)) 45 { 46 if(ml[0]==‘S‘) break; 47 else if(ml[0]==‘E‘) 48 { 49 int tt; 50 scanf("%d",&tt); 51 int fl = mp[tt]; 52 if(!qu[fl].empty()) 53 { 54 qu[fl].push_back(tt); 55 } 56 else 57 { 58 it = find(vv.begin(),vv.end(),fl); 59 if(it != vv.end()) vv.erase(it); 60 vv.push_back(fl); 61 qu[fl].push_back(tt); 62 } 63 } 64 else if(ml[0]==‘D‘) 65 { 66 int flag = 0; 67 while(qu[vv[flag]].empty()) 68 { 69 flag+=1; 70 } 71 int o= qu[vv[flag]].front() ; 72 printf("%d\n",o); 73 qu[vv[flag]].pop_front(); 74 } 75 } 76 puts(""); 77 } 78 return 0; 79 }
下面给出一个queue 的写法,更新一个知识点,queue的pop函数是用来去除最前面的元素的所以可以直接用pop
1 #include<cstdio> 2 #include<queue> 3 #include<map> 4 using namespace std; 5 const int maxn = 1010; 6 int main() 7 { 8 int t , kase = 0 ; 9 while(~scanf("%d",&t),t) 10 { 11 printf("Scenario #%d\n",++kase); 12 //记录所有人的团队编号 13 map<int , int> team; 14 for(int i = 0 ;i < t ; i++) 15 { 16 int n , x; 17 scanf("%d",&n); 18 while(n--){ 19 scanf("%d",&x); team[x] = i; 20 } 21 } 22 //模拟 23 queue<int> q, q2[maxn];//q是团队的队列,q2是团队i成员的队列 24 for(;;) 25 { 26 int x ; 27 char cmd[10]; 28 scanf("%s",cmd); 29 if(cmd[0]==‘S‘) break; 30 else if(cmd[0] ==‘D‘) 31 { 32 int t = q.front(); 33 printf("%d\n",q2[t].front());q2[t].pop(); 34 if(q2[t].empty()) q.pop();//团队t全部出队 35 } 36 else if(cmd[0] == ‘E‘) 37 { 38 scanf("%d",&x); 39 int t = team[x]; 40 if(q2[t].empty()) q.push(t); 41 q2[t].push(x); 42 } 43 } 44 printf("\n"); 45 } 46 return 0; 47 }
标签:
原文地址:http://www.cnblogs.com/shanyr/p/4734459.html