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. Linux System Programming -- Appendix

    这本书附录的名字是 "GCC对C语言的扩展" ,一下的内容是对扩展的总结 类型发现 GCC 允许通过变量的引用识别类型.这种操作支持泛型编程.在 C++.Ada 和 Java™ 语 ...

  2. linux下播放组播流出现setsockopt:No such device错误

    在linux下播放组播流出现setsockopt:No such device错误是因为多播IP没有add路由表里面 可以采用如下命令完成: root@android:/ # busybox rout ...

  3. android 向webview传值

    android中可以使用WebView加载网页,同时Android端的java代码可以与网页上的javascript代码之间相互调用. 效果图: (一)Android部分: 布局代码: <spa ...

  4. android 如何添加第3方lib库到kernel中

    注意:只能将lib库放在kernel编译到的地方,如下: alps/kernel/ alps/mediatek/custom/common/kernel/ alps/mediatek/custom/$ ...

  5. Leetcode_204_Count Primes

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46366207 Description: Count the ...

  6. 一键安装 redmine on rhel6.4

    一键安装 redmine on rhel6.4 一键式安装redmine省去了大量不必要的时间.下载:bitnami-redmine-2.5.2-1-linux-x64-installer.run. ...

  7. iOS中获取本地通讯录联系人以及汉字首字母排序

    iOS中获取手机通讯录中的联系人信息: /*** 加载本地联系人*/ - (void)loadLocalContacts { //新建一个通讯录类 ABAddressBookRef addressBo ...

  8. android 应用模式之mvp

    说到MVP就不得不提到MVC,做过J2EE的猿友们肯定知道MVC是个什么东西.MVC即 Model.View.Controller, 那MVP就Model.View.Presenter.Model用于 ...

  9. SharePoint 2007 文档库中的文档添加评论功能

    背景:接到一个项目,要求文档管理,当然文档库就可以了,但是要求文档需要大家去读,读完以后还可以发表评论,这Moss貌似就有点困难了.和同事一起合计,想来想去也没有太好的办法,后来想到传统开发,两个表的 ...

  10. SharePoint2007 开发部署Application Pages

    介绍:SharePoint应用程序页,也就是_layouts路径下的aspx页面,服务器C:\Program Files\Common Files\Microsoft Shared\web serve ...