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 ...
随机推荐
- HDU 1256 画8 模拟题
解题报告:这题我觉得题目有一个没有交代清楚的地方就是关于横线的字符的宽度的问题,题目并没有说,事实上题目要求的是在保证下面的圈高度不小于上面的圈的高度的情况下,横线的宽度就是等于下面的圈的高度. #i ...
- 【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作
[蓝桥杯单片机11]单总线温度传感器DS18B20的基本操作 广东职业技术学院 欧浩源 单总线数字温度传感器DS18B20几乎成了各类单片机甚至ARM实验板的标配模块来,在蓝桥杯的往届省赛和国赛中,这 ...
- 【译】第三篇 Replication:事务复制-发布服务器
本篇文章是SQL Server Replication系列的第三篇,详细内容请参考原文. 发布服务器是所有复制数据的源头.每一个发布服务器上可以定义多个发布.每一个发布包含一组项目(项目在同一个数据库 ...
- [转]双线性插值(Bilinear interpolation)
1,原理 在图像的仿射变换中,很多地方需要用到插值运算,常见的插值运算包括最邻近插值,双线性插值,双三次插值,兰索思插值等方法,OpenCV提供了很多方法,其中,双线性插值由于折中的插值效果和运算速度 ...
- JS函数的几种用法
1.正常使用:
- no libsigar-amd64-linux.so in java.library.path 解决方法
关于sigar的介绍可以参考这边博文 :https://www.cnblogs.com/luoruiyuan/p/5603771.html 在Linux上运行java程序时出现 no libsigar ...
- LINUX修改、增加IP的方法,一张网卡绑定多个IP/漂移IP【转】
临时增加IP命令:ifconfig eth0:1 ip地址 netmask 子网码 broadcast 广播地址 gateway 网关 ifconfig eth0:1 10.1.104.65 net ...
- git clone直接提交用户名和密码
git使用用户名密码clone的方式: git clone http://username:password@remote 例如:我的用户名是abc@qq.com,密码是abc123456,git地址 ...
- 修改类不用重启Tomcat加载整个项目
可以修改类不用重启Tomcat加载整个项目(手工启动) 配置reloadable=true(自动重载) 使用Debug模式,前提是仅限于局部修改.(修改类不用重启--热加载) Tomcat轻小,而We ...
- mac下PHPStorm2018.2破解教程
1.首先安装phpstorm 2.下载JetbrainsCrack-3.1-release-enc.jar然后把这个文件放入安装phpstorm/contents/lib目录下 3.用文本编辑器打开p ...