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 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
tip
模拟题
answer
#include<algorithm>
#include<iomanip>
#include<iostream>
#include<vector>
#include<queue>
#define INF 0x3f3f3f3f
using namespace std;
int N, K, Begin, End;
typedef struct {
int arr, begin, end, pro, wait;
}People;
vector<People> p;
queue<People> q[110];
int TranTime(string t){
int hour = 0, minute = 0, second = 0;
hour = (t[0]-'0')*10+t[1]-'0';
minute = (t[3]-'0')*10+t[4]-'0';
second = (t[6]-'0')*10+t[7]-'0';
return (hour)*60*60 + minute*60 + second;
}
bool Comp(People a, People b){
return a.arr < b.arr;
}
void Push(People &t){
int min = INF, index = 0;
bool flag = false;
for(int i = 0; i < K; i++){
if(q[i].empty()) {
index = i;
flag = true;
continue;
}
if(q[i].back().end < min && !flag) {
min = q[i].back().end;
index = i;
}
}
// cout<<index<<endl;
if(flag){
if(t.arr < Begin){
t.begin = Begin;
t.wait = Begin - t.arr;
}else{
t.begin = t.arr;
t.wait = 0;
}
t.end = t.begin + t.pro;
q[index].push(t);
}else{
if(t.arr < q[index].back().end){
t.begin = q[index].back().end;
t.wait = q[index].back().end - t.arr;
}else{
t.begin = t.arr;
t.wait = 0;
}
t.end = t.begin + t.pro;
q[index].push(t);
}
// cout<<t.arr/(3600)<<":"<<t.arr%(3600)/60<<" "<<t.begin/(3600)<<":"<<t.begin%(3600)/60<<" "<<t.end/(3600)<<":"<<t.end%(3600)/60<<" "<<t.wait/60<<" "<<t.pro/60<<" "<<endl;
}
void Pop(){
}
void PrintStatus(){
for(int i = 0; i < K; i++){
cout<<i<<endl;
for(int j = 0; j < q[i].size(); j++){
cout<<q[i].front().begin/(60*60)<<":"<<q[i].front().begin%(60*60) /60<<" "<<q[i].front().end/(60*60)<<":"<<q[i].front().end%(60*60) /60<<" "<<q[i].front().wait<<endl;
q[i].push(q[i].front());
q[i].pop();
}
cout<<endl;
}
}
int main(){
// freopen("test.txt", "r", stdin);
ios::sync_with_stdio(false);
Begin = TranTime("08:00:00");
End = TranTime("17:00:00");
cin>>N>>K;
for(int i = 0; i < N; i++){
string time;
int pro;
cin>>time>>pro;
People tp;
tp.arr = TranTime(time);
tp.pro = pro*60;
if(tp.arr > End) continue;
p.push_back(tp);
}
sort(p.begin(), p.end(), Comp);
for(int i = 0; i < p.size(); i++){
Push(p[i]);
// PrintStatus();
}
// PrintStatus();
float wait = 0.0;
for(int i = 0; i < p.size(); i++){
wait += p[i].wait / 60.0;
}
cout<<fixed<<setprecision(1)<<wait/p.size()<<endl;
return 0;
}
/*
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
*/
exprience
- 应该在30分钟内解决的一个简单模拟题,因为写代码时思考的太少而导致debug时间太长。
1017 Queueing at Bank (25)(25 point(s))的更多相关文章
- 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 (模拟)
1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...
- PAT 1017 Queueing at Bank[一般]
1017 Queueing at Bank (25)(25 分)提问 Suppose a bank has K windows open for service. There is a yellow ...
- PAT甲级1017. Queueing at Bank
PAT甲级1017. Queueing at Bank 题意: 假设一家银行有K台开放服务.窗前有一条黄线,将等候区分为两部分.所有的客户都必须在黄线后面排队,直到他/她轮到服务,并有一个可用的窗口. ...
- MySQL5.7.25(解压版)Windows下详细的安装过程
大家好,我是浅墨竹染,以下是MySQL5.7.25(解压版)Windows下详细的安装过程 1.首先下载MySQL 推荐去官网上下载MySQL,如果不想找,那么下面就是: Windows32位地址:点 ...
- PAT 甲级 1006 Sign In and Sign Out (25)(25 分)
1006 Sign In and Sign Out (25)(25 分) At the beginning of every day, the first person who signs in th ...
- 【PAT】1020 Tree Traversals (25)(25 分)
1020 Tree Traversals (25)(25 分) Suppose that all the keys in a binary tree are distinct positive int ...
- 【PAT】1052 Linked List Sorting (25)(25 分)
1052 Linked List Sorting (25)(25 分) A linked list consists of a series of structures, which are not ...
- 【PAT】1060 Are They Equal (25)(25 分)
1060 Are They Equal (25)(25 分) If a machine can save only 3 significant digits, the float numbers 12 ...
- 【PAT】1032 Sharing (25)(25 分)
1032 Sharing (25)(25 分) To store English words, one method is to use linked lists and store a word l ...
随机推荐
- 20155331 2016-2017-2 《Java程序设计》第5周学习总结
20155331 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 一.Java异常的基础知识 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时 ...
- JavaScript辅助响应式
js响应式 rem辅助响应式布局:其实就是指在HTML页面的大小不断变化的时候,里面的宽.高.字体等等也随之变化,主要是通过获取window.innerwidth的值来进行判断,7.5rem===10 ...
- c语言学习笔记.链表.
链表: 链表单个节点的数据结构.链表的实现主要依靠结构体和指针. 头指针(head)指向链表的第一个节点,然后第一个节点中的指针指向下一个节点,然后依次指到最后一个节点,这样就构成了一条链表. str ...
- D - Doing Homework HDU - 1074 (状压dp)
题目链接:https://cn.vjudge.net/contest/68966#problem/D 具体思路:我们可以把每个情况都枚举出来,然后用递归的形式求出最终的情况. 比如说 我们要求 10 ...
- 【逆向知识】开发WinDBG扩展DLL
如何开发WinDbg扩展DLL WinDbg扩展DLL是一组导出的回调函数,用于实现用户定义的命令.以便从内存转储中提取特定的信息.扩展dll由调试器引擎加载,可以在执行用户模式或内核模式调试时提供自 ...
- Linux机器如何在公司内网配置代理
一.通过上网认证 必须在图形界面下使用浏览器(如Firefox)完成上网认证过程. 请先确保本机已经可以正常访问公司内部网络. Firefox上配置代理: 1)打开Firefox首选项,[高级]-[网 ...
- HDU 6061 RXD and functions
题目链接:HDU-6061 题意:给定f(x),求f(x-A)各项系数. 思路:推导公式有如下结论: 然后用NTT解决即可. 代码: #include <set> #include < ...
- js点击页面其他地方如何隐藏div元素菜单
web页面常用的一个需求,写下拉菜单是我们往往不是用select_option,而是自定义一个元素列出选项来满足需求,当我们点击按钮出现菜单, 点击按钮或菜单以外页面空白地方隐藏该菜单,这里提供一种简 ...
- CSS--盒子模型详解
目录 图解 盒模型尺寸基准 使用浏览器的开发者工具,查看元素高(宽)度时,遇到的问题 一.图解 说明:由内而外依次是content.padding(内边距).border(边框).margin(外边距 ...
- JS调用百度地图API标记地点
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...