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 ...
随机推荐
- 解决mysql无法显示中文/MySQL中文乱码问号等问题
一般都是编码格式问题 显示编码格式: show variables like'character_set_%'; 将其中Value不是utf8的改为utf8: set character_set_cl ...
- 原创:Kmeans算法实战+改进(java实现)
kmeans算法的流程: EM思想很伟大,在处理含有隐式变量的机器学习算法中很有用.聚类算法包括kmeans,高斯混合聚类,快速迭代聚类等等,都离不开EM思想.在了解kmeans算法之前,有必要详 ...
- [Beta]Scrum Meeting#4
github 本次会议项目由PM召开,时间为5月9日晚上10点30分 时长15分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客整理文档 撰写博客整理文档 swoip 改进界面 改进界面 bh ...
- paddlepaddle如何预加载embedding向量
使用小批量数据时,模型容易过拟合,所以需要对全量数据进行处理,我是用的是word2vec训练的词向量. 那么训练好对词向量如何加载呢? #!/usr/bin/env python # -*- codi ...
- Heartbeat took longer than "00:00:01" at "09/06/2019 05:08:08 +00:00".
.netcore在k8s+docker+linux,部署后,偶尔会报这样的警告 Warn:Microsoft.AspNetCore.Server.KestrelHeartbeat took longe ...
- ABAP基础篇2 数据类型
基本数据类型列表: 1.长度可变的内置类型(String.XString)1)string类型 在ABAP程序中,string类型是长度无限的字符型字段,可以和CHAR ,D,T ,I,N (F和P未 ...
- Python模块学习filecmp文件比较
Python模块学习filecmp文件比较 filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于dif ...
- 大数据开发工程师面试《一》Shopee虾皮技术面
一.项目问题 1 做了哪些项目2 使用什么技术3 哪个是你主导的项目,一共开发多少个接口,项目多长时间,数据库有多少个表 二.技术问题 1 用自己擅长的语言实现非递归单链表反转 现场手写2 Hadoo ...
- 🐯 php项目中类的自动加载
主要函数:spl_autoload_register() — 注册给定的函数作为 __autoload() 的实现 将函数注册到SPL __autoload函数队列中.如果该队列中的函数尚未激活,则激 ...
- SQL Server表分区(转)
什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在 ...