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
 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std; int N,K,wait_time=;
struct Customer
{
int arrive_time;
int need_time;
}; struct Customer customer[]; struct Windows
{
int next_available_time;
}; struct Windows windows[]; bool cmp(struct Customer a,struct Customer b)
{
return a.arrive_time<b.arrive_time;
} int find_available_windows(int arrive_time)
{
int i;
for(i=;i<K;i++) {
if(windows[i].next_available_time<=arrive_time) {
return i;
}
}
return -;
} int find_earliest_window()
{
int i;
int e=;
for(i=;i<K;i++) {
if(windows[i].next_available_time<windows[e].next_available_time) {
e=i;
}
}
return e;
} int main()
{
scanf("%d%d",&N,&K);
int i;
char arrive_time[];
int need_time;
for(i=;i<K;i++)
windows[i].next_available_time=*;
int len=;
for(i=;i<N;i++) {
int h,m,s;
scanf("%s%d",arrive_time,&need_time);
if(strcmp(arrive_time,"17:00:00")>)
continue; sscanf(arrive_time,"%d:%d:%d",&h,&m,&s);
if(h<)
wait_time+=*-(*h+*m+s);
customer[len].arrive_time=*h+*m+s;
customer[len++].need_time=need_time*;
}
N=len; sort(customer,customer+N,cmp); for(i=;i<N;i++) {
int w=find_available_windows(customer[i].arrive_time);
if(w>=) {//找到空闲窗口
// windows[w].next_available_time=customer[i].arrive_time+customer[i].need_time;
if(customer[i].arrive_time<*) {
windows[w].next_available_time=*+customer[i].need_time;
} else {
windows[w].next_available_time=customer[i].arrive_time+customer[i].need_time;
}
} else { //找不到空闲窗口
w=find_earliest_window();
/* wait_time+=windows[w].next_available_time-customer[i].arrive_time;
* windows[w].next_available_time=(windows[w].next_available_time-customer[i].arrive_time)+customer[i].need_time;
*/
if(customer[i].arrive_time<*) {//如果到得早 窗口的下个可用时间等于当前下个可用时间加新来顾客所需要服务时间
wait_time+=windows[w].next_available_time-*;
windows[w].next_available_time=windows[w].next_available_time+customer[i].need_time;
} else {
wait_time+=windows[w].next_available_time-customer[i].arrive_time;
windows[w].next_available_time=windows[w].next_available_time+customer[i].need_time;
} }
} printf("%.1f\n",1.0*wait_time/60.0/N);
}

PAT 1017. Queueing at Bank的更多相关文章

  1. PAT 1017 Queueing at Bank[一般]

    1017 Queueing at Bank (25)(25 分)提问 Suppose a bank has K windows open for service. There is a yellow ...

  2. PAT 1017 Queueing at Bank (模拟)

    1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. PAT甲级1017. Queueing at Bank

    PAT甲级1017. Queueing at Bank 题意: 假设一家银行有K台开放服务.窗前有一条黄线,将等候区分为两部分.所有的客户都必须在黄线后面排队,直到他/她轮到服务,并有一个可用的窗口. ...

  7. 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 ...

  8. PAT 甲级 1017 Queueing at Bank

    https://pintia.cn/problem-sets/994805342720868352/problems/994805491530579968 Suppose a bank has K w ...

  9. PAT (Advanced Level) 1017. Queueing at Bank (25)

    简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...

随机推荐

  1. Javascript自执行匿名函数(function() { })()的原理浅析

    匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一 ...

  2. 【python】求水仙数

    for i in range(100, 1000): sum = 0 temp = i while temp: sum = sum + (temp%10) ** 3 temp //= 10 # 注意使 ...

  3. 用Python和Django实现多用户博客系统(二)——UUBlog

    这次又更新了一大部分功能,这次以app的形式来开发. 增加博客分类功能:博客关注.推荐功能(ajax实现) 增加二级频道功能 更多功能看截图及源码,现在还不完善,大家先将就着看.如果大家有哪些功能觉的 ...

  4. makefile中PHONY的重要性

    伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过   PHONY来指明. PHONY定义伪目标的命令 ...

  5. Learn Docker

    Learn Docker A Container is to VM today, what VM was to Physical Servers a while ago. The workload s ...

  6. IE8下String的Trim()方法失效的解决方法

    String的Trim()方法失效,在ie8下是有这样的情况的,解决方法也很简单使用$.trim(str)即可,需要的朋友可以了解下 用jquery的trim()方法,$.trim(str)就可以了.

  7. GITLAB的版本回退(非命令行)

    今天遇到小韩的问题,大约解决如下:

  8. POJ_1220_Nmber Sequence

    上网查了一下进制转换的算法,发现一个性能比较好的:m进制转换成n进制,先用例如62进制ABC转换成10进制,就是用余位c(第一个数余位数值为0)乘以原基数from,加上A表示的数值,然后得到一个数,对 ...

  9. ruby hashtable散列表

    dict={'cat'=>'abc','dog'=>'def'}puts dict.size dict.keys返回所有的key, values返回所有的value. 删除: dict.d ...

  10. [LeetCode#161] One Edit Distance

    Problem: Given two strings S and T, determine if they are both one edit distance apart. General Anal ...