PTA A1017
A1017 Queueing at Bank (25 分)
题目内容
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. All the customers have to wait in line behind the yellow line, until it is his/her turn to be served and there is a window available. It is assumed that no window can be occupied by a single customer for more than 1 hour.
Now given the arriving time T and the processing time P of each customer, you are supposed to tell the average waiting time of all the customers.
Input Specification:
Each input file contains one test case. For each case, the first line contains 2 numbers: N (≤104) - the total number of customers, and K (≤100) - the number of windows. Then N lines follow, each contains 2 times: HH:MM:SS - the arriving time, and P - the processing time in minutes of a customer. Here HH is in the range [00, 23], MM and SS are both in [00, 59]. It is assumed that no two customers arrives at the same time.
Notice that the bank opens from 08:00 to 17:00. Anyone arrives early will have to wait in line till 08:00, and anyone comes too late (at or after 17:00:01) will not be served nor counted into the average.
Output Specification:
For each test case, print in one line the average waiting time of all the customers, in minutes and accurate up to 1 decimal place.
Sample Input:
7 3
07:55:00 16
17:00:01 2
07:59:59 15
08:01:00 60
08:00:00 30
08:00:02 2
08:03:00 10
Sample Output:
8.2
题目分析
这道题其实思路不是很难的,毕竟先做过了一个30分的类似题,思路是很相似的,需要注意的是如果到达时间不超过17:00,而完成的时间超过17:00这种情况是要计算在内的,只是我有一个疑问如果到了17:00,还没排到队的人是否应该继续等待?按常识是不会的,可是这道题目按常识来是不对的。。。我当时加了一个判断如果一个窗口的endtime大于了17:00,那么后面的客户等待时间应该是到17:00就结束了,继续等下去显然是有点傻的,因为人家已经不服务了啊,显然对于一道模拟题,我觉得这里设计的不太好啊。
这题似乎还有另一个小bug,大家可以尝试一下,如果大家忘记题目给的It is assumed that no window can be occupied by a single customer for more than 1 hour.条件,即不判断每一个人的处理过程是否超过了一个小时,这道题目依然能AC,我一开始没注意这个条件,最后一个测试点过不了以为是这里的问题,可是修改后依然过不了。最后我把之前代码都给删除掉用秒作为基本单位,而不是分(我一开始用的是分作为比较单位,比较麻烦,我怀疑最后一个点A不了和这个有点关系),A掉了,我特意把在前面判断一个每个人停留时间是否超过1个小时的代码删除,发现依然A掉了。。。这显然是测试系统忘记了这个条件,感兴趣的大家可以尝试一下。
基于上面两个原因,虽然我的思路一开就想好了,但A题的过程很不顺利,唉~
具体代码
#include<stdio.h>
#include<stdlib.h>
int endtime[105] = { 0 };
struct person
{
int sec;
int pro;
};
struct person p[10010];
int N, M;
int all_wait = 0;
int cmp(const void *p, const void *q)
{
return ((struct person*)p)->sec - ((struct person*)q)->sec;
}
int main(void)
{
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
{
int h, m, s, t;
scanf("%d:%d:%d %d", &h, &m, &s, &t);
if (t * 60 > 3600)
p[i].pro = 60 * 60;
else
p[i].pro = t * 60;
p[i].sec = h * 60 * 60 + m * 60 + s;
}
for (int i = 0; i < M; i++)
{
endtime[i] = 8 * 60 * 60;
}
int i;
qsort(p, N, sizeof(struct person), cmp);
for (i = 0; (i < N) && (p[i].sec <= 17 * 60 * 60); i++)
{
int earliest = 0;
for (int j = 0; j < M; j++)
if (endtime[j] < endtime[earliest])
earliest = j;
if (p[i].sec < endtime[earliest])
{
all_wait += endtime[earliest] - p[i].sec;
endtime[earliest] += p[i].pro;
}
else
endtime[earliest] = p[i].sec + p[i].pro;
}
if (i)
printf("%.1f", all_wait / 60.0 / i);
else
printf("0.0");
system("pause");
}
参考博客
PTA A1017的更多相关文章
- 浙大PTA - - 堆中的路径
题目链接:https://pta.patest.cn/pta/test/1342/exam/4/question/21731 本题即考察最小堆的基本操作: #include "iostrea ...
- 浙大PTA - - File Transfer
题目链接:https://pta.patest.cn/pta/test/1342/exam/4/question/21732 #include "iostream" #includ ...
- ERROR<53761> - Plugins - conn=-1 op=-1 msgId=-1 - Connection Bind through PTA failed (91). Retrying...
LDAP6.3在DSCC控制台启动实例完成,但是操作状态显示“意外错误”,查看日志如下: 04/May/2016:21:10:39 +0800] - Sun-Java(tm)-System-Direc ...
- PTA中提交Java程序的一些套路
201708新版改版说明 PTA与2017年8月已升级成新版,域名改为https://pintia.cn/,官方建议使用Firefox与Chrome浏览器. 旧版 PTA 用户首次在新版系统登录时,请 ...
- PTA分享码-Java
主要用于Java语法练习,非竞赛类题目. 1. Java入门 959dbf0b7729daa61d379ec95fb8ddb0 2. Java基本语法 23bd8870e ...
- C语言第一次实验报告————PTA实验1.2.3内容
一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度100°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...
- PTA题---求两个有序序列中位数所体现的思想。
---恢复内容开始--- 近日,在做PTA题目时,遇到了一个这样的题,困扰了很久.题目如下:已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A0,A1, ...
- 第十四,十五周PTA作业
1.第十四周part1 7-3 #include<stdio.h> int main() { int n; scanf("%d",&n); int a[n]; ...
- 第七周PTA作业
第一题: #include<stdio.h> int main() { ; ; ){ sum=sum+i; i++; } printf("sum = %d\n",sum ...
随机推荐
- planning algorithms chapter 1
chapter 1 介绍 什么是规划? 在机器人领域,运动规划和轨迹规划主要用来解决"怎么移动钢琴"的问题,这个问题是如何将钢琴从一个房间移动到另一个房间,并且保证钢琴不和其他事物 ...
- lintcode-828. 字模式
题目描述: 828.字模式 给定一个模式和一个字符串str,查找str是否遵循相同的模式.这里遵循的意思是一个完整的匹配,在一个字母的模式和一个非空的单词str之间有一个双向连接的模式对应. 样例 给 ...
- Hash总结
算法介绍 这个没什么好说的,就是一段比较简单的代码,具体的话要看题目. 自然溢出 这个是比较好用而且容易被卡的一种Hash方式. 用\(2^{64}\)当模数然后做\(Hash\),常数比较小. 单模 ...
- 记一次MyBatisPlus问题(如果表名是数据库关键字怎么办)
问题信息:如果表名是数据库关键字怎么办? 正常来说,如果是我们自己写sql的话,给表名加反引号即可解决问题. 但是由于我们使用MyBatisPlus,相关的sql基本上都是封装并自动生成的.如果是这种 ...
- kafka(五) 流式处理 kafka stream
参考文档: http://www.infoq.com/cn/articles/kafka-analysis-part-7?utm_source=infoq&utm_campaign=user_ ...
- 为什么不要使用==比较Integer?
比较Integer的时候,不要用==. 查看Integer的源码,如下: /** * Returns an {@code Integer} instance representing the spec ...
- php – 通过curl从url获取JSON数据
我试图通过curl连接从URL获取JSON数据.当我打开链接时:它显示{“version”:“N / A”,“success”:true,“status”:true}.现在,我希望获得以上内容. 到目 ...
- convmv 解决GBK 迁移到 UTF-8 ,中文 文件名乱码
yum install convmv 命令: convmv -f GBK -t UTF-8 -r --nosmart --notest <目标目录> -f from -t to --nos ...
- SpringBoot(十六):SpringBoot2.1.1集成fastjson,并使用fastjson替代默认的MappingJackson
springboot2.1.1默认采用的json converter是MappingJackson,通过调试springboot项目中代码可以确定这点.在springboot项目中定义WebMvcCo ...
- 部署一个fc网站需要注意的地方
1. php环境 必须5.3 2. yum install nodejs 3. yum install v8-devel 3. 下载v8js php扩展, 版本是 v8js-0.1.3 tar -zx ...