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 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 (≤) - the total number of customers, and K (≤) - 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
题目分析:(写了好长时间没写出来,还是去看柳神的了)
将时间处理为秒数读入 将符合条件的读入vector中
对于窗口,每次选取一个时间最小的窗口进行处理
如果 要处理的顾客到达时间比 那个时间最小的窗口还小 无需等待 直接处理并更新窗口时间
反之 记录等待时间
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
struct Node
{
int come, time;
}customer;
bool compare(const Node& a, const Node& b)
{
return a.come < b.come;
}
int main()
{
int N, K;
int Size = ;
cin >> N >> K;
vector<Node>Custom;
for (int i = ; i < N; i++)
{
int hh, mm, ss, tt;
scanf("%d:%d:%d%d", &hh, &mm, &ss, &tt);
int cometime = hh * + mm * + ss;
if (cometime > )continue;
customer = { cometime,tt*};
Custom.push_back(customer);
Size++;
}
sort(Custom.begin(), Custom.end(), compare);
vector<int>window(K, );
double SumTime=;
for (int i = ; i < Size; i++)
{
int Min = window[];
int Minp = ;
for (int j = ; j < K; j++)
{
if (window[j] < Min)
{
Min = window[j];
Minp = j;
}
}
if (Custom[i].come >= window[Minp])
window[Minp] = Custom[i].come + Custom[i].time;
else
{
SumTime += window[Minp] - Custom[i].come;
window[Minp] += Custom[i].time;
}
}
if (Size)
printf("%.1f", SumTime / (Size * 1.0) / );
else
printf("0.0");
return ;
}
1017 Queueing at Bank (25 分)的更多相关文章
- 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 ...
- 【PAT甲级】1017 Queueing at Bank (25 分)
题意: 输入两个正整数N,K(N<=10000,k<=100)分别表示用户的数量以及银行柜台的数量,接下来N行输入一个字符串(格式为HH:MM:SS)和一个正整数,分别表示一位用户到达银行 ...
- 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 ...
- 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 ...
- 1017 Queueing at Bank (25)(25 point(s))
problem Suppose a bank has K windows open for service. There is a yellow line in front of the window ...
- 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 ...
- PAT (Advanced Level) 1017. Queueing at Bank (25)
简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...
- PAT甲题题解-1017. Queueing at Bank (25)-模拟
有n个客户和k个窗口,给出n个客户的到达时间和需要的时长有空闲的窗口就去办理,没有的话就需要等待,求客户的平均时长.如果在8点前来的,就需要等到8点.如果17点以后来的,则不会被服务,无需考虑. 按客 ...
- PAT 1017 Queueing at Bank[一般]
1017 Queueing at Bank (25)(25 分)提问 Suppose a bank has K windows open for service. There is a yellow ...
随机推荐
- flask blueprint出现的坑
from flask import Blueprint admin = Blueprint('admin',__name__) def init_bule(app): app.register_blu ...
- 5W随想
什么时候都要想5个W:what.where.when.why.who 比如:提bug的时候:这个问题是什么问题,在哪里发现的,什么时候发现的/什么时候修复好,怎么发现的/为什么是bug,谁发现的/指给 ...
- python3.6 单文件爬虫 断点续存 普通版 文件续存方式
# 导入必备的包 # 本文爬取的是顶点小说中的完美世界为列.文中的aa.text,bb.text为自己创建的text文件 import requests from bs4 import Beautif ...
- 将python的字典格式数据写入excei表中
上面的为最终结果 import requests import re import xlwt import json # 导入必须的包: xlwt,json,requests,re. headers ...
- 《52讲轻松搞定网络爬虫》读书笔记 —— HTTP基本原理
URI 和 URL URI :Uniform Resource Identifier,即统一资源标志符, URL :Universal Resource Locator,即统一资源定位符. 举栗子,加 ...
- 多个文件名大小写不同,是因为运行代码是大写E,用vscode运行的是小写e,解决方案:手动npm run dev #There are multiple modules with names that only differ in casing.
多个文件名大小写不同,是因为运行代码是大写E,用vscode运行的是小写e,解决方案:手动npm run dev #There are multiple modules with names that ...
- js遍历删除对象的key
// 如果用户没有填写值,则删除对象的key. Object.keys(obj).forEach( (key) => { if (!obj[key]) { // !obj[key]表示 ...
- 安卓侧滑菜单及MenuPopup 的功能实现
- hdu2087kmp模板练习
题目网址:http://icpc.njust.edu.cn/Problem/Hdu/2087/ 代码: #include<bits/stdc++.h> using namespace st ...
- 图论-完全二叉树判定-Check Completeness of a Binary Tree
2020-02-19 13:34:28 问题描述: 问题求解: 判定方式就是采用层序遍历,对于一个完全二叉树来说,访问每个非空节点之前都不能访问过null. public boolean isComp ...