关闭

PAT 1017 Queueing at Bank (模拟)

标签: PAT 1017Queueing at Bank模拟
279人阅读 评论(0) 收藏 举报
分类:

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;
}


0
0
查看评论

pat1017Queueing at Bank (25)

题意分析: (1)给出N个人的到达银行的时间和需要被服务的时间,在K个窗口的情况下,求出所有人的平均等待时间,对于5点以后到达的人不计算在内。 (2)看似是排队的问题,需要先固定每个人在哪个窗口队列的哪个位置以及他前面的人的服务时间,同时也依赖于他的到达时间和当前第一个人被服务了多长时间,这样看来问...
  • LostStephon
  • LostStephon
  • 2015-10-03 15:54
  • 628

PAT-甲级-1017. Queueing at Bank【模拟】

1017. Queueing at BankSuppose a bank 题目大意:给出n个人,k个窗口。接下来输入每个人到达时间以及办业务的时间。问平均每个人的等待时间是多少,以分钟计算
  • loy_184548
  • loy_184548
  • 2016-05-27 20:38
  • 2945

PAT 1017 Queueing at Bank

1017. Queueing at Bank (25) 第一次是没按秒走,错了半天。 第二次是顾客在17点前到,但17点前无法得到服务,应该得到服务。 #include #include #include using namespace std; #define arrived (p[tur...
  • zhengweijian15
  • zhengweijian15
  • 2014-01-31 17:40
  • 472

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 devides the waiting area into two parts. All the c...
  • Hickey_Chen
  • Hickey_Chen
  • 2018-02-03 15:06
  • 10

【PAT 1017】 Queueing at Bank 模拟算法

1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
  • tiantangrenjian
  • tiantangrenjian
  • 2014-02-27 23:40
  • 1833

1017. Queueing at Bank (25)-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 devides the waiting a...
  • liuchuo
  • liuchuo
  • 2017-01-16 14:21
  • 320

【C++】1017. Queueing at Bank (25)

1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Suppose a bank has K windows open ...
  • artemisrj
  • artemisrj
  • 2014-03-22 16:15
  • 683

PAT(甲级)1017 . Queueing at Bank (25)

1017 . Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Suppose a bank has K windows open for serv...
  • WYK1823376647
  • WYK1823376647
  • 2018-02-07 12:19
  • 11

pat 1017 Queueing at Bank(23分)

实质上是一个有截止时间的多任务调度问题,多个窗口,多个顾客,一个等待队列,截止时间为17点,算平均等待时间。思路是进行模拟,以i来模拟时间一秒一秒,每一秒都遍历所有窗口,若有窗口空闲且有顾客在等待,就服务。差一个点没过,不知是何种情况。需要考虑的情况有: 1. 全部都在17点以后到,这样结果为0....
  • jjike
  • jjike
  • 2013-02-28 14:42
  • 979

1017 Queueing at Bank --队列模拟2

忘了time是关键字, 懒得改了,define一下。#include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std;#defi...
  • lhfl911
  • lhfl911
  • 2016-11-29 20:18
  • 106
    个人资料
    • 访问:130751次
    • 积分:4653
    • 等级:
    • 排名:第7456名
    • 原创:349篇
    • 转载:0篇
    • 译文:0篇
    • 评论:7条
    最新评论