uva 540 Team Queue (队列模拟)
2013-09-24 19:50
465 查看
很好的一道练习队列的题目。。。。。也是wrong了好几次才发现自己code的BUG。
就是一个简单的排队打饭问题。
不断的入队出队,重要的是维护好队列里元素的相对位置。
最多1000个队列同时维护。。。。好像用链表或者是list容器来维护空间上会好一点。。。
具体实现看代码
就是一个简单的排队打饭问题。
不断的入队出队,重要的是维护好队列里元素的相对位置。
最多1000个队列同时维护。。。。好像用链表或者是list容器来维护空间上会好一点。。。
具体实现看代码
#include<cstdio> #include<iostream> #include<string> #include<cstring> using namespace std; const int Maxsize = 1010; int data[Maxsize][Maxsize];/*存储输入数据*/ int front_q[Maxsize],rear[Maxsize];/*维护每个队列时的头尾指针*/ int arry[Maxsize];/*每小队人的数量。。还是来维护数据输入的*/ int team[Maxsize][Maxsize];/*队列*/ int Index[Maxsize];/*记录小队间在队列中的前后位置*/ bool vis[Maxsize];/*当前小队已经入队的标记*/ int cnt;/*队列中小队的数量*/ int main() { #ifdef LOCAL freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int n; int kkk = 1; while(cin>>n && n) { cnt = 0; bool aaa = false; memset(data,0,sizeof(data)); memset(arry,0,sizeof(data)); memset(vis,false,sizeof(vis)); memset(front_q,0,sizeof(front_q)); memset(rear,0,sizeof(rear)); memset(team,-1,sizeof(team)); memset(Index,0,sizeof(Index)); for(int i = 0 ; i < n ; i++) { cin>>arry[i]; for(int j = 0 ; j < arry[i] ; j++) { cin>>data[i][j]; } } string operat; while(cin>>operat && operat != "STOP") { if(operat == "ENQUEUE") { int k; cin>>k; bool flag = false; if(cnt == 0)/*队列空,第一个小队入队*/ { for(int i = 0 ; i < n ; i++) { for(int j = 0 ; j < arry[i] ; j++) { if(k == data[i][j]) { flag = true; team[cnt][rear[cnt]++] = k; Index[cnt++] = i; vis[i] = true; break; } } if(flag) { break; } } } else/*当前元素的小队已经入队*/ { for(int i = 0 ; i < cnt ; i++) { for(int j = 0 ; j < arry[Index[i]] ; j++) { if(k == data[Index[i]][j] && Index[i] != -1) { flag = true; team[i][rear[i]++] = k; break; } } if(flag) { break; } } if(!flag)/*小队元素没有入队时,该元素作为第一个代表小队入队*/ { for(int i = 0 ; i < n ; i++) { if(!vis[i]) { for(int j = 0 ; j < arry[i] ; j++) { if(k == data[i][j]) { flag = true; vis[i] = true; team[cnt][rear[cnt]++] = k; Index[cnt++] = i; } } } } } } } else if(operat == "DEQUEUE") { if(!aaa) { printf("Scenario #%d\n",kkk++); aaa = true; } for(int i = 0 ; i < cnt ; i++) { if(Index[i] != -1) { if(front_q[i] < rear[i]) { cout<<team[i][front_q[i]]<<endl; front_q[i]++; if(front_q[i] == rear[i]) { vis[Index[i]] = false; Index[i] = -1;/*队列一直向后延伸的特性*/ } break; } } } } } cout<<endl; } return 0; } /*多个队列模拟。。*/
相关文章推荐
- UVA540 Team Queue(模拟:队列)
- Team Queue (uva540 队列模拟)
- Team Queue (uva540 队列模拟)
- uva540 Team Queue(模拟:队列)
- uva 540 Team Queue(队列+模拟)
- UVa 540 Team Queue (STL list&queue模拟插队)
- UVa 540 (团体队列) Team Queue
- UVa - 540 - Team Queue(STL - 队列queue)
- ACM学习历程——UVA540 Team Queue(队列,map:Hash)
- UVA - 540 Team Queue(STL,队列 )
- 团体队列UVA540 Team Queue(队列简单用法)
- HDU 1387 && UVa 540 Team Queue(队列应用)
- UVa 540 Team Queue(团队队列)
- 经典第五章 例 5-6 UVA 540 Team Queue(队列的简单应用)【queue】
- Uva540 Team Queue 【队列】【例题5-6】
- uvaoj 540 Team Queue 队列模拟
- UVA540:Team Queue(团体队列)
- UVA540 Team Queue(队列简单用法)
- UVA 540 Team Queue(队列)
- UVA 540 Team Queue(团体队列)