1017. Queueing at Bank (25)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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

思路

贪心策略,将办理业务的人按到达时间递增排序,先来的优先服务(将时间统一转换为秒方便计算)。
注意:
1.业务办理时间不应超过1小时。
2.17点之后来的人不提供服务。
3.一个窗口的空闲时刻有两种情况:
1)空闲直到下一个人customer[i]到达银行办理业务,那么这个窗口的下一个空闲时刻为customer[i]的到达时间加上他办理业务需要的时间。
2)如果在一个窗口空闲前,custmoer[i]就先来了,那么他需要等(窗口空闲时间-他到达的时间)这么一段时间。该窗口的下一个空闲时刻就是它当前空闲时刻加上customer[i]的业务办理时间。 代码
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;
class person
{
public:
int cometime;
int taketime;
person(int ct,int tt)
{
cometime = ct;
taketime = tt;
}
}; /*贪心策略 先来的先服务,有空窗口就服务*/ bool cmp(const person& a,const person& b)
{
return a.cometime < b.cometime;
} int main()
{
int N,K;
vector<person> customer;
while(cin >> N >> K)
{
vector<int> windows(K,28800);
for(int i = 0;i < N;i++)
{
int hh,mm,ss,lasttime;
scanf("%d:%d:%d %d",&hh,&mm,&ss,&lasttime);
if(lasttime > 60)
lasttime = 60;
lasttime *= 60;
int arrivetime = hh * 3600 + mm * 60 + ss;
if(arrivetime > 61200)
continue;
customer.push_back(person(arrivetime,lasttime));
}
sort(customer.begin(),customer.end(),cmp);
double waitTime = 0;
for(int i = 0;i < customer.size();i++)
{
int minwindow = windows[0],tmpindex = 0;
for(int j = 0;j < K;j++)
{
if(windows[j] < minwindow)
{
minwindow = windows[j];
tmpindex = j;
}
}
if(customer[i].cometime >= minwindow)
{
windows[tmpindex] = customer[i].cometime + customer[i].taketime;
}
else
{
waitTime += minwindow - customer[i].cometime;
windows[tmpindex] += customer[i].taketime;
}
}
if(customer.empty())
cout << "0.0" << endl;
else
cout << fixed << setprecision(1) << waitTime/60.0/customer.size() << endl;
}
}

  

PAT1017:Queueing at Bank的更多相关文章

  1. pat1017. Queueing at Bank (25)

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

  2. PAT甲级1017. Queueing at Bank

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

  3. PAT 1017 Queueing at Bank[一般]

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

  4. PAT 1017 Queueing at Bank (模拟)

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

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

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

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

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

  9. 1017. Queueing at Bank (25) - priority_queuet

    题目如下: Suppose a bank has K windows open for service. There is a yellow line in front of the windows ...

随机推荐

  1. com.android.dex.DexException: Multiple dex files define(jar包重复引用) 错误解决

    前段时间开始转入Android studio,不料果真使用时候遇到些错误,在此记下! 出现这个错误往往是在libs目录下有个jar包,然后在gradle文件中又引用了,即: 共同引用了. 解决方法: ...

  2. myfirstBI项目总结

    app 应用信息统计: saiku安装:http://blog.csdn.net/longshenlmj/article/details/17359645 workbench解压即用,http://b ...

  3. Struts2技术内幕 读书笔记三 表示层的困惑

    表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...

  4. 程序员面试宝典3TH-ch7.2

    下列程序的输出结果是什么? #include "stdafx.h" #include <iostream> using namespace std; class A { ...

  5. javascript算术运算溢出

    js中的算术在溢出overflow,下溢underflow或被0整除时不会报错. 当数字结果超过了数字上限时,结果为一个特殊的无穷大(infinity)值,在js中以Infinity表示:同理,当负数 ...

  6. 使用kubeadm搭建Kubernetes(1.10.2)集群(国内环境)

    目录 目标 准备 主机 软件 步骤 (1/4)安装 kubeadm, kubelet and kubectl (2/4)初始化master节点 (3/4) 安装网络插件 (4/4)加入其他节点 (可选 ...

  7. ScrollView与ListView嵌套使用,导致ListView下拉失效

    在一次项目开发中,在Scrollv中嵌套进ListView,当触摸ListView范围下拉时,整个展示页面滑动,而不是ListView内容滑动, 也就是说ListView滑动事件被ScrollView ...

  8. 管理xcode插件

    1.打开终端 2.输入     open ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins 3.出现 4.想删除那个就随意吧 ...

  9. SpringMVC:数据绑定入门(二)

    1.为了实现所输入的数据格式与所需要的匹配该如何做到?例如:http://localhost:8080/date1.do?date1=2018-01-01,其中输入的date1的数据类型为一个格式为& ...

  10. GlitchBot -HZNU寒假集训

    One of our delivery robots is malfunctioning! The job of the robot is simple; it should follow a lis ...