PAT (Advanced) 1014. Waiting in Line (30)
来源:互联网 发布:中国云计算用户大会 编辑:程序博客网 时间:2024/06/06 10:06
原题:1014. Waiting in Line (30)
解题思路:
1.可以确定一个顾客在加入队伍时,服务结束的时间就已经决定。
2.顾客是按顺序到达,但是没有时间间隔,所以只要有窗口前队伍未满,就会加入。
3.由此可以将顾客分为两类,第一类是在窗口全满前到达,第二类是在之后到达的。
4.第一类直接加入队伍,并刷新队伍最后一个人结束的时间,借此获取每个顾客的结束时间。
5.第二类寻找队伍中第一个顾客最早结束的队伍,并加入,其余操作同4。
注:可使用队列模拟队伍。
C++代码如下:
#include<cstdio>#include<queue>#include<algorithm>using namespace std;const int maxn = 1010;struct window{ int firstTime; //第一个顾客结束的时间 int lastTime; //最后一个顾客结束的时间 queue<int> Q; //队伍:保存每个顾客的服务时间} win[21];struct customer{ int finishTime; //保存结束时间 int serveTime; //保存服务时间} cus[maxn];int main(){ int n, m, query, k; while(scanf("%d%d%d%d", &n, &m, &k, &query) != EOF) { for(int i = 0; i < k; i++) { int t; scanf("%d", &t); cus[i].serveTime = t; } //初始化每个窗口到8:00 for(int i = 0; i < n; i++) { win[i].firstTime = 8 * 60; win[i].lastTime = 8 * 60; } int index = 0; for(; index < min(m * n, k); index++) //先处理前 n*m 个顾客,注意与k比较大小 { //入队 win[index % n].Q.push(cus[index].serveTime); //更新队伍结束时间以及顾客服务结束时间 cus[index].finishTime = win[index % n].lastTime + cus[index].serveTime; win[index % n].lastTime = cus[index].finishTime; } for(; index < k; index++) { //寻找第一个顾客结束最早的队伍 int u = -1, MIN = 21 * 3600; for(int i = 0; i < n; i++) { if(MIN > win[i].firstTime + win[i].Q.front()) { u = i; MIN = win[i].firstTime + win[i].Q.front(); } } //更新队列信息以及获取顾客服务结束时间 win[u].firstTime = win[u].firstTime + win[u].Q.front(); win[u].Q.pop(); win[u].Q.push(cus[index].serveTime); win[u].lastTime = win[u].lastTime + cus[index].serveTime; cus[index].finishTime = win[u].lastTime; } for(int i = 0; i < query; i++) { int q; scanf("%d", &q); if(cus[q - 1].finishTime - cus[q - 1].serveTime >= 17 * 60) // 服务开始时间超过 17:00 (含17:00)不予服务 printf("Sorry\n"); else printf("%02d:%02d\n", cus[q - 1].finishTime / 60, cus[q - 1].finishTime % 60); } } return 0;}
阅读全文
0 0
- PAT (Advanced) 1014. Waiting in Line (30)
- PAT (Advanced) 1014. Waiting in Line (30)
- 【PAT Advanced Level】1014. Waiting in Line (30)
- PAT (Advanced Level) Practise 1014. Waiting in Line (30)
- PAT (Advanced Level) 1014. Waiting in Line (30) 银行排队
- 浙大 PAT Advanced level 1014. Waiting in Line (30)
- 【PAT】【Advanced Level】1014. Waiting in Line (30)
- 1014. Waiting in Line @ PAT (Advanced Level) Practise
- [PAT (Advanced Level) ]1014.Waiting in Line 解题文档
- PAT (Advanced Level) Practise 1014 Waiting in Line (30)
- PAT (Advanced Level) Practise 1014 Waiting in Line (30)
- 1014. Waiting in Line (30)——PAT (Advanced Level) Practise
- [ZJU.PAT] 1014. Waiting in Line (30)
- 1014. Waiting in Line (30)-PAT
- pat 1014. Waiting in Line (30)
- PAT 1014. Waiting in Line (30)
- PAT A 1014. Waiting in Line (30)
- PAT 1014. Waiting in Line (30)
- Struts框架相应用户请求的工作流程
- 值类型、引用类型、拆箱装箱
- Java 通过 sessionId 获取 Session
- Python之字符串
- 利用OPENCV为android相机开发图像处理库
- PAT (Advanced) 1014. Waiting in Line (30)
- mybatis入门
- javaweb 作业
- 头文件
- socket.io的emit使用清单
- javaweb基础(一)
- MacOS 开发
- <c语言经典100例>c17 完数
- mysql主从同步