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

题目有一个坑点,那就是只要下午5

点之前到的顾客,5点之后也必须要服务,即使已经下班了,意思都没说清楚

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h>
#include <map>
#include <string>
#include <strstream>
#include <vector>
#include <queue> using namespace std;
typedef long long int LL;
int n;
int k;
struct Node
{
int st;
int t;
}a[10005],tag[105];
int cmp(Node a,Node b)
{
return a.st<b.st;
}
queue<Node> q;
int tim(int hh,int mm,int ss){return hh*60*60+mm*60+ss;}
int hh,mm,ss,t;
int ans[10005];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d:%d:%d %d",&hh,&mm,&ss,&t);
a[i].st=tim(hh,mm,ss);
a[i].t=t*60;
}
sort(a+1,a+n+1,cmp); int ss=tim(8,0,0);
int ee=tim(17,0,0);
for(int i=1;i<=k;i++)
{tag[i].st=0;tag[i].t=0;}
int cnt=1;
int ans=0;
int num=0;
for(int i=1;i<=n;i++)
{
if(a[i].st<ss)
{
ans+=(ss-a[i].st);
a[i].st=ss;
}
else
break;
} for(int i=ss;i;i++)
{
if(i>ee&&q.empty())
break;
if(i==ss)
{
int p;
for(p=1;p<=n;p++)
{
if(a[p].st==i)
{
q.push(a[p]);
}
else
break;
}
cnt=p;
}
else
{
if(i<=ee&&cnt<=n&&a[cnt].st==i)
q.push(a[cnt++]);
}
for(int j=1;j<=k;j++)
{ if(tag[j].st!=0&&tag[j].st+tag[j].t==i)
{
tag[j].st=0;
if(!q.empty())
{
tag[j].st=i;
tag[j].t=q.front().t;
ans+=i-q.front().st;
num++;
q.pop();
}
}
else if(tag[j].st==0)
{
if(!q.empty())
{
tag[j].st=i;
tag[j].t=q.front().t;
ans+=i-q.front().st;
num++;
q.pop();
}
} }
} if(num==0)
{ printf("%0.0\n");
}
else
printf("%.1f\n",ans/60.0/num);
return 0;
}

PAT 1017 Queueing at Bank (模拟)的更多相关文章

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

  2. PAT 1017 Queueing at Bank[一般]

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

  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 (25 分)(模拟题,有点思维小技巧,第二次做才理清思路)

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

  7. PAT甲级1017. Queueing at Bank

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

  8. PAT甲题题解-1017. Queueing at Bank (25)-模拟

    有n个客户和k个窗口,给出n个客户的到达时间和需要的时长有空闲的窗口就去办理,没有的话就需要等待,求客户的平均时长.如果在8点前来的,就需要等到8点.如果17点以后来的,则不会被服务,无需考虑. 按客 ...

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

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

随机推荐

  1. 全面进攻python之前回顾下自己近三个月的自学之路

    人生是在一直试错的过程中成长起来的.这句话貌似很有道理,但回顾了下自己近三个月python自学学习之路,又觉得自己对这句话又有了新的看法------行动之前必须要有正确的选择,这样做错了才能成长. 2 ...

  2. ASDASASD

    测试 markdown 随笔 asdsdf sdf

  3. centos 安装cmake 3.3.2

    先卸掉本身自带的 cmake 2.8 yum remove cmake cmake版本:3.3.2 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-deve ...

  4. C# LDAP

    Lightweight Directory Access Protocol OpenLDAP

  5. c#各类型转byte[]或转回

    var tmp = BitConverter.ToInt32(new byte[]{...}); var bytes = BitConverter.GetBytes(tmp); 而String转byt ...

  6. atitit.《金刚经》与it软件项目管理的启发 读后感attilax

    atitit.<金刚经>与it软件项目管理的启发 读后感attilax 1.1. 经中宣称一切世间事物空幻不实,如梦幻泡如梦幻泡影,实相者则是非相.主 张 放弃对现实世间的执著或眷恋,以般 ...

  7. [svc]salt-webui

    CherryPy https://pypi.python.org/packages/source/C/CherryPy/CherryPy-3.2.4.tar.gz#md5=e2c8455e15c39c ...

  8. 使用Nginx Lua实现redis高性能http接口

    使用Nginx Lua实现redis高性能http接口 时间 -- :: 峰云就她了 原文 http://xiaorui.cc/2015/01/27/使用nginx-lua实现redis高性能http ...

  9. 【Objective-C】02-Objective-C学习及iOS开发的准备

    前言 由于大部分朋友对iOS开发还是有比较多的疑问,比如是不是一定要买iPhone和苹果笔记本才能做iOS开发?因此,这讲就为广大有意学习iOS开发的朋友们进行解惑. 一.什么是iOS开发 iOS是由 ...

  10. CMSGC造成内存碎片的解决方法

    我们知道,CMSGC在老生代回收时产生的内存碎片会导致老生代的利用率变低:或者可能在老生代总内存大小足够的情况下,却不能容纳新生代的晋升行为(由于没有连续的内存空间可用),导致触发FullGC.针对这 ...