uva 540 Team Queue (队列模拟)
来源:互联网 发布:淘宝专家贷款在哪里 编辑:程序博客网 时间:2024/05/17 02:06
很好的一道练习队列的题目。。。。。也是wrong了好几次才发现自己code的BUG。
就是一个简单的排队打饭问题。
不断的入队出队,重要的是维护好队列里元素的相对位置。
最多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;}/*多个队列模拟。。*/
- uva 540 Team Queue(队列+模拟)
- uva 540 Team Queue (队列模拟)
- UVA.540 Team Queue (队列)
- UVa - 540 - Team Queue(STL - 队列queue)
- UVa 540 Team Queue(团队队列)
- UVA - 540 Team Queue(STL,队列 )
- Team Queue UVA 540 (团体队列)
- UVA 540 Team Queue(团体队列)
- uvaoj 540 Team Queue 队列模拟
- Team Queue (uva540 队列模拟)
- UVa 540 Team Queue (STL list&queue模拟插队)
- UVa 540 Team Queue
- uva 540 team queue
- Uva 540 Team Queue
- uva 540 - Team Queue
- UVa 540 - Team Queue
- UVA 540 Team Queue
- uva 540 Team Queue
- CRiadioButton
- 【桌面虚拟化】之三 Persistent vs NonP
- 第六章 remove(删除)程序的编写
- 机房收费系统验收总结
- 使用contentProvider实现数据共享
- uva 540 Team Queue (队列模拟)
- 大学生活:贫穷而快乐的日子
- 经典的语录
- java排序之壹------快速排序代码
- [转]php web安全(旧)
- Java正则表达式,详解反斜线在Java中的作用
- 关于printf,sprintf,CCString格式化问题
- java 多线程同步
- mysql5.6免安装配置