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. Lucene4.9学习笔记——Lucene建立索引

    基本上创建索引需要三个步骤: 1.创建索引库IndexWriter对象 2.根据文件创建文档Document 3.向索引库中写入文档内容 这其中主要涉及到了IndexWriter(索引的核心组件,用于 ...

  2. vs2010 未能正确加载方案中的一个或多个项目

    Visual studio在打开解决方案时,往往会碰到一个这样的错误,提示说:未能正确加载方案中的一个或多个项目: 我们可以通过以下步骤来解决该问题:首先,在相应的sln类型文件上点击右键,选择用记事 ...

  3. oracle 报“无效数字”异常和“ORA-01830: 日期格式图片在转换整个输入字符串之前结束”

    1.问题1 执行下列SQL: sql = "select count(1) as totle from vhl_model_data a where a.OBTAIN_CREATE_TIME ...

  4. 【C#】动态加载dll程序集

    原文:http://www.cnblogs.com/bomo/archive/2013/03/01/2938165.html 很多时候我们需要用到引用其他程序集,有些程序集是.Net生成的,可以支持反 ...

  5. python的特殊方法:

    __str__和__repr__ 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, name, ...

  6. bzoj 3043: IncDec Sequence 模拟

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 248  Solved: 139[Submit][Statu ...

  7. BZOJ 1639: [Usaco2007 Mar]Monthly Expense 月度开支

    Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100 ...

  8. Essential Sublime Text Plugins

    Essential Sublime Text Plugins Add some killer tools to your arsenal. View them all at /repo/sublime ...

  9. 前端性能优化(三)——传统 JavaScript 优化的误区

    注:本文是纯技术探讨文,无图无笑点,希望您喜欢 一.前言 软件行业极其缺乏前端人才这是圈内的共识了,某种程度上讲,同等水平前端的工资都要比后端高上不少,而圈内的另一项共识则是--网页是公司的脸面! 几 ...

  10. Android 系统功能设置菜单 LinearLayout与relativeLayout的实现

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...