1014. Waiting in Line (30)
2016-03-08 19:38
507 查看
create the queue model with circular queues.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #include <cstdio> #define MAX 11 int n,m,k,q; int now,t[1001],end[1001]; int next; typedef struct{ int data[MAX]; int front,rear; int len; }queue; queue que[21]; void addq(queue &q,int i){ q.data[q.rear]=i; q.rear=(q.rear+1)%MAX; q.len++; } void deq(queue &q){ q.front=(q.front+1)%MAX; q.len--; } int main(){ scanf("%d%d%d%d",&n,&m,&k,&q); for(int i=1;i<=k;i++) scanf("%d",&t[i]); now=0; next=1; for(int i=1;i<=n;i++){ que[i].rear=que[i].front=0; que[i].len=0; } while(next<=n*m && next<=k){ addq(que[(next-1)%n+1],next); next++; } bool empty=false; while(!empty){ int min=10000; empty=true; for(int i=1;i<=n;i++) if(que[i].len){ empty=false; int num=que[i].data[que[i].front]; if(t[num]<min) min=t[num]; } if(!empty) now+=min; for(int i=1;i<=n;i++) if(que[i].len){ int num=que[i].data[que[i].front]; t[num]-=min; if(!t[num]){ end[num]=now; deq(que[i]); if(now>=540) while(que[i].len){ num=que[i].data[que[i].front]; end[num]=-1; deq(que[i]); } if(next<=k && now<540) addq(que[i],next++); } } } while(next<=k) end[next++]=-1; for(int i=1;i<=q;i++){ int a; scanf("%d",&a); if(end[a]<0) printf("Sorry\n"); else printf("%02d:%02d\n",8+end[a]/60,end[a]%60); } return 0; } |
相关文章推荐
- libdvbpsi源码分析(四)PAT表解析/重建
- PAT配置
- 什么是端口复用动态地址转换(PAT) 介绍配置实例
- MikroTik layer7-protocol
- PAT是如何工作的
- PAT 乙级题:1002. 写出这个数 (20)
- PAT (Advanced Level) Practise 1001-1010
- 数据结构学习与实验指导(一)
- PAT Basic Level 1001-1010解题报告
- 1001. 害死人不偿命的(3n+1)猜想
- 1002. 写出这个数
- 1032. 挖掘机技术哪家强
- 1001. 害死人不偿命的(3n+1)猜想 (PAT basic)
- 1002. 写出这个数(PAT Basic)
- 1004. 成绩排名(PAT Basic)
- 1006. 换个格式输出整数(PAT Basic)
- 1007. 素数对猜想(PAT Basic)
- 1008. 数组元素循环右移问题
- 1009. 说反话(PAT Basic)
- 1011. A+B和C(PAT Basic)