PAT 1017 Queueing at Bank[一般]
1017 Queueing at Bank (25)(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 (<=10000) - 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
(25)(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 (<=10000) - 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
AC:
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
struct co{
int arrive;
int begn;
int serve;
int wait;
}; bool cmp( co a , co b){
return a.arrive<b.arrive;
} int main()
{
int n,k;
int hh,mm,ss,ser,sum=;
scanf("%d%d",&n,&k);
co * Co=new co[];
if(>=n||>=k){
printf("0.0");
return ;
}
int beg=*;
for(int i=;i<n;i++){
scanf("%d:%d:%d %d",&hh,&mm,&ss,&ser);
//到达是不同时到达的,
//共32400s
Co[sum].arrive=hh*+mm*+ss-beg;//转换成秒
Co[sum].serve=ser*;
if(Co[sum].arrive<)sum++;//sum表示一共有多少人。
//我的妈呀,if里的sum写成了i。。。。导致代码通不过,醉了。
}
n=sum;
sort(Co,Co+n,cmp);//按到达时间排序。
int win[k];//表示当前窗口都没人;为什么我一开始这里定义为3,一定是气懵了。。。。
fill(win,win+k,-); int no=;//还剩下多少人需要服务。
for(int tm=;no!=n;tm++){
//int tm=0;tm<32400;tm++,一开始for循环条件是这个,但是发现了问题,
//如果这样的话,就不能保证所有在17:00之前到的顾客都能服务了。
if(no==n)break;
for(int i=;i<k;i++){
if(win[i]!=-){
if(Co[win[i]].begn+Co[win[i]].serve==tm){//当前正好有结束的。
//下一位顾客进来
win[i]=-;
}
}
}
for(int i=;i<k;i++){//如果有空,那么就开始放。
if(win[i]==-&&Co[no].arrive<=tm){
Co[no].begn=tm;
win[i]=no;
no++;
if(no==n)break;
}
}
}
// for(int i=0;i<n;i++){
// printf("\n%d %d %d\n",Co[i].arrive,Co[i].begn,Co[i].serve);
// }
long long total=;
int miu=;
for(int i=;i<n;i++){
total+=(Co[i].begn-Co[i].arrive);
// if(total%60==0){
// miu+=total/60;
// total=0;
// }
}
//miu+=1.0*total/60;//在这里不会四舍五入!!!
printf("%.1f",total/60.0/n);
return ;
}
/**
2 2
8:00:05 1
12:00:00 1 **/
//对我自己醉了,通不过就是因为瞎。。心瞎。。遇到了段错误,原来是自己一开始定义数组就错了。之后还答案错误,原来是数组下标写错了。感谢牛客网,通不过的话会有样例,能根据样例去修改代码!
PAT 1017 Queueing at Bank[一般]的更多相关文章
- PAT 1017 Queueing at Bank (模拟)
1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...
- pat——1017. Queueing at Bank (java中Map用法)
由PAT1017例题展开: Suppose a bank has K windows open for service. There is a yellow line in front of the ...
- PAT 1017. Queueing at Bank
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...
- PAT 1017 Queueing at Bank (25) (坑题)
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...
- PAT 1017 Queueing at Bank (模拟)
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...
- PAT甲级1017. Queueing at Bank
PAT甲级1017. Queueing at Bank 题意: 假设一家银行有K台开放服务.窗前有一条黄线,将等候区分为两部分.所有的客户都必须在黄线后面排队,直到他/她轮到服务,并有一个可用的窗口. ...
- PAT 甲级 1017 Queueing at Bank (25 分)(模拟题,有点思维小技巧,第二次做才理清思路)
1017 Queueing at Bank (25 分) Suppose a bank has K windows open for service. There is a yellow line ...
- PAT 甲级 1017 Queueing at Bank
https://pintia.cn/problem-sets/994805342720868352/problems/994805491530579968 Suppose a bank has K w ...
- PAT (Advanced Level) 1017. Queueing at Bank (25)
简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...
随机推荐
- Esper学习之十五:Pattern(二)
上一篇开始了新一轮语法——Pattern的讲解,一开始为大家普及了几个基础知识,其中有说到操作符.当时只是把它们都列举出来了,所以今天这篇就是专门详解这些操作符的,但是由于篇幅限制,本篇先会讲几个,剩 ...
- css方法 - 移动端h5在iphonex的适配
@media only screen and (device-width:375px) and (device-height:812px) and (-webkit-device-pixel-rati ...
- Window 命令行神器:cmder
http://cmder.net/ https://github.com/cmderdev/cmder/releases/ 官网下载地址 http://www.360doc.com/content ...
- yum配置与使用(很详细)
yum的配置一般有两种方式,一种是直接配置/etc目录下的yum.conf文件,另外一种是在/etc/yum.repos.d目录下增加.repo文件.一.yum的配置文件 $ cat /etc/yum ...
- 移除DuiLib项目Linker中的riched20.lib
如果已安装Windows SDK.Windows Mobile SDK且默认包含这些目录编译源代码没有问题.由于一些改动需要版本管理发现Build Agent运行失败,考虑到迁移各方面原因还是决定修改 ...
- Dockerfile创建镜像
Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile来快速创建自定义的镜像. Dockerfile由一行行命令语句组成,并且支持易#开头的注释行. 一般而言Dockerfil ...
- [APP] Android 开发笔记 006-使用短信验证SDK进行短信验证
1. 下载SDK (http://www.mob.com/#/download) SMS For Android Studio: http://www.mob.com/download/sms/and ...
- Android 国内集成使用谷歌地图
extends:http://blog.csdn.net/qduningning/article/details/44778751 由于众做周知的原因在国内使用谷歌地图不太方便,在开发中如果直接使用会 ...
- IDEA安全编码组件
import java.io.UnsupportedEncodingException;import java.security.Key;import java.security.Security; ...
- [转][darkbaby]任天堂传——失落的泰坦王朝(中)
TV游戏产业历史上曾有过太多表里不一的外交辞令,然而当年SQUARE和任天堂分道扬镳的真正原因确实如坂口博信在1996年2月29日的PS版 <FFVII>发表会上宣称的那样:“虽然之前有过 ...