PAT (Advanced) 1017. Queueing at Bank (25)
来源:互联网 发布:鸟倦飞而知还的而用法 编辑:程序博客网 时间:2024/05/17 09:27
原题:1017. Queueing at Bank (25)
解题思路:
1.将所有顾客的时间转化为相对00:00 : 00 的秒, 然后进行排序。
2.每次寻找最早结束的窗口分配给当前顾客,计算等待时间。
3.按照顾客到达时间进行动态更新服务窗口的结束时间,注意过滤17:00:00以后来的顾客。
注:当没有顾客时直接输出0.0; 寻找最早服务结束的窗口时,注意把初始的min值设大一些,一开始我设到晚上9点,结果最后一个测试点没过; 只要17:00 前到的顾客,不管窗口服务有没有在17:00前结束,都要为其服务。
C++代码如下:
#include<cstdio>#include<algorithm>using namespace std;const int maxn = 10010;struct Customer{ int serveTime; int arriveTime;} customer[maxn];int win[101];int getTime(int h, int m, int s){ return h * 3600 + m * 60 + s;}bool cmp(Customer a, Customer b){ return a.arriveTime < b.arriveTime;}int main(){ int n, k; while(scanf("%d%d", &n, &k) != EOF) { int st = getTime(8, 0, 0); int ed = getTime(17, 0, 0); for(int i = 0; i < n; i++) { int h, m, s, serve; scanf("%d:%d:%d %d", &h, &m, &s, &serve); customer[i].serveTime = serve * 60; customer[i].arriveTime = getTime(h, m, s); } //初始化窗口 for(int i = 0; i < k; i++) { win[i] = st; } sort(customer, customer + n, cmp); int cnt = 0, total = 0; for(int i = 0; i < n; i++) { //对到达顾客进行预处理,超时服务时间转为一小时 if(customer[i].arriveTime > ed) break; if(customer[i].serveTime > 3600) customer[i].serveTime = 3600; //寻找服务窗口 int u = -1, MIN = 100000000; for(int j = 0; j < k; j++) { if(win[j] < MIN) { u = j; MIN = win[j]; } } if(customer[i].arriveTime < win[u]) { total += (win[u] - customer[i].arriveTime); win[u] = win[u] + customer[i].serveTime; } else { win[u] = customer[i].arriveTime + customer[i].serveTime; } cnt++; } if(cnt == 0) printf("0.0\n"); else printf("%.1f\n", double(total) / 60 / cnt); } return 0;}
阅读全文
0 0
- PAT (Advanced) 1017. Queueing at Bank (25)
- PAT (Advanced) 1017. Queueing at Bank (25)
- 1017. Queueing at Bank (25) @ PAT (Advanced Level) Practise
- 【PAT Advanced Level】1017. Queueing at Bank (25)
- PAT (Advanced Level) Practise 1017. Queueing at Bank (25)
- 浙大 PAT Advanced level 1017. Queueing at Bank (25)
- 【PAT】【Advanced Level】1017. Queueing at Bank (25)
- PAT (Advanced Level) Practise 1017 Queueing at Bank (25)
- PAT (Advanced Level) Practise 1017 Queueing at Bank (25)
- pat 1017. Queueing at Bank (25)
- pat 1017. Queueing at Bank (25)
- 【PAT】1017. Queueing at Bank (25)
- PAT 1017. Queueing at Bank (25)
- PAT A 1017.Queueing at Bank (25)
- PAT 1017. Queueing at Bank (25)
- PAT 1017. Queueing at Bank (25)
- PAT 1017. Queueing at Bank (25)
- PAT 1017. Queueing at Bank (25)
- 用JS获取地址栏参数的方法
- sparkOnHbase 解决spark读取hbase数据后不能分布式操作
- The C Programming Language 练习题1-21
- vue2使用axios post跳坑,封装成模块
- maven问题汇总
- PAT (Advanced) 1017. Queueing at Bank (25)
- Java核心技術卷_1_基本結構
- linux命令总结
- Linux下搭建Hadoop集群(Centos7.0)
- HDU 1251 统计难题 (字典树)
- LeetCode编程练习
- 导入Javaweb项目后jsp文件报错:The type java.io.UnsupportedEncodingException cannot be resolved. It is indir
- hibernate的三种状态的总结(挺精辟)
- 控制文件