pat1014. Waiting in Line (30)
1014. Waiting in Line (30)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. The rules for the customers to wait in line are:
- The space inside the yellow line in front of each window is enough to contain a line with M customers. Hence when all the N lines are full, all the customers after (and including) the (NM+1)st one will have to wait in a line behind the yellow line.
- Each customer will choose the shortest line to wait in when crossing the yellow line. If there are two or more lines with the same length, the customer will always choose the window with the smallest number.
- Customer[i] will take T[i] minutes to have his/her transaction processed.
- The first N customers are assumed to be served at 8:00am.
Now given the processing time of each customer, you are supposed to tell the exact time at which a customer has his/her business done.
For example, suppose that a bank has 2 windows and each window may have 2 custmers waiting inside the yellow line. There are 5 customers waiting with transactions taking 1, 2, 6, 4 and 3 minutes, respectively. At 08:00 in the morning, customer1 is served at window1 while customer2 is served at window2. Customer3 will wait in front of window1 and customer4 will wait in front of window2. Customer5 will wait behind the yellow line.
At 08:01, customer1 is done and customer5 enters the line in front of window1 since that line seems shorter now. Customer2 will leave at 08:02, customer4 at 08:06, customer3 at 08:07, and finally customer5 at 08:10.
Input
Each input file contains one test case. Each case starts with a line containing 4 positive integers: N (<=20, number of windows), M (<=10, the maximum capacity of each line inside the yellow line), K (<=1000, number of customers), and Q (<=1000, number of customer queries).
The next line contains K positive integers, which are the processing time of the K customers.
The last line contains Q positive integers, which represent the customers who are asking about the time they can have their transactions done. The customers are numbered from 1 to K.
Output
For each of the Q customers, print in one line the time at which his/her transaction is finished, in the format HH:MM where HH is in [08, 17] and MM is in [00, 59]. Note that since the bank is closed everyday after 17:00, for those customers who cannot be served before 17:00, you must output "Sorry" instead.
Sample Input
2 2 7 5
1 2 6 4 3 534 2
3 4 5 6 7
Sample Output
08:07
08:06
08:10
17:00
Sorry
教训:
Note that since the bank is closed everyday after 17:00, for those customers who cannot be served before 17:00, you must output "Sorry" instead.
这句话的含义是如果不能在17:00之前开始服务,则输出“Sorry”
注意:vector就是可变长的动态数组,比较灵活好用
加入元素:push_back()
删除元素:用vector<int>::iterator it 遍历至要删除的元素,然后v.erase(it)
元素个数:size()
访问元素:和一般的数组一样,直接访问
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <vector>
#include <iostream>
using namespace std;
struct custom{
int cost,finish;
};
vector<int> v[];
custom cu[];
int main(){
//freopen("D:\\INPUT.txt","r",stdin);
int n,m,k,q;
scanf("%d %d %d %d",&n,&m,&k,&q);
int i,j;
for(i=;i<k;i++){
scanf("%d",&cu[i].cost);
}
for(i=;i<n&&i<k;i++){
cu[i].finish=cu[i].cost;
v[i].push_back(i);
}
for(;i<m*n&&i<k;i++){
cu[i].finish=cu[v[i%n][v[i%n].size()-]].finish+cu[i].cost;
v[i%n].push_back(i);
}
for(;i<k;i++){
int mintime=cu[v[][]].finish,minnum=;
for(j=;j<n;j++){
if(cu[v[j][]].finish<mintime){
minnum=j;
mintime=cu[v[j][]].finish;
}
}
cu[i].finish=cu[v[minnum][v[minnum].size()-]].finish+cu[i].cost;
vector<int>::iterator it=v[minnum].begin();
v[minnum].erase(it);
v[minnum].push_back(i);
}
int num;
for(i=;i<q;i++){
scanf("%d",&num);
if(cu[num-].finish-cu[num-].cost<){
//cout<<num-1<<" "<<cu[num-1].finish<<endl;
int h=cu[num-].finish/+;
if(h>){
continue;
}
int m=cu[num-].finish%;
if(h>){
cout<<h;
}
else{
cout<<<<h;
}
cout<<":";
if(m>){
cout<<m;
}
else{
cout<<<<m;
}
cout<<endl;
}
else{
cout<<"Sorry"<<endl;
}
}
return ;
}
pat1014. Waiting in Line (30)的更多相关文章
- PAT-1014 Waiting in Line (30 分) 优先队列
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...
- PAT 甲级 1014 Waiting in Line (30 分)(queue的使用,模拟题,有个大坑)
1014 Waiting in Line (30 分) Suppose a bank has N windows open for service. There is a yellow line ...
- 1014 Waiting in Line (30分)
1014 Waiting in Line (30分) Suppose a bank has N windows open for service. There is a yellow line i ...
- 1014. Waiting in Line (30)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...
- 1014 Waiting in Line (30)(30 point(s))
problem Suppose a bank has N windows open for service. There is a yellow line in front of the window ...
- 1014 Waiting in Line (30)(30 分)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...
- 1014 Waiting in Line (30 分)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which ...
- PTA 1014 Waiting in Line (30分) 解题思路及满分代码
题目 Suppose a bank has N windows open for service. There is a yellow line in front of the windows whi ...
- PAT A 1014. Waiting in Line (30)【队列模拟】
题目:https://www.patest.cn/contests/pat-a-practise/1014 思路: 直接模拟类的题. 线内的各个窗口各为一个队,线外的为一个,按时间模拟出队.入队. 注 ...
随机推荐
- web集群时session同步的3种方法
在做了web集群后,你肯定会首先考虑session同步问题,因为通过负载均衡后,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,一个登录用户,一会是登录状态,一会又不是 ...
- c#读取数据库内容
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- c# 根据文件夹或文件名返回(文件夹或文件)的完整路径
c# 根据文件夹或文件名返回(文件夹或文件)的完整路径 一.方案一:(使用windows API) 二.方案二:(扫描全盘)
- ajax的get,post ,封装
let ajax = new Object(); ajax.get = function(url,fn){ //创建ajax对象 let xhr = new XMLHttpRequest(); //与 ...
- rest_framwork中ApiView实现分页
from rest_framework.pagination import PageNumberPagination from .serializers import BookSerilizer fr ...
- java 复习总结
java 复习总结 命名方法 创建文件的名称应该和类的名称一致,不然会报错. 类采用首字母大写的方式来命名,如果是多个单词的类名,则每个单词首字母都大写,例如:HelloWorld . 方法采用驼峰命 ...
- JS编程模式之初始化分支与惰性初始
不同的浏览器对于相同或相似的方法可能有不同的实现.这时,您需要依据当前的浏览器的支持方法来选择对应的执行分支.这类分支有可能与很多,因此可能会减缓脚本的执行速度.但非要等到运行时才能分支吗?我们完全可 ...
- 使用github和hexo搭建静态博客
获得更多资料欢迎进入我的网站或者 csdn或者博客园 终于写这篇文章了,这是我使用github和hexo搭建博客的一些心得,希望能给大家一点帮助.少走点弯路.刚接触github,只是用来存项目的版本, ...
- 跟我一起读postgresql源码(一)——psql命令
进公司以来做的都是postgresql相关的东西,每次都是测试.修改边边角角的东西,这样感觉只能留在表面,不能深入了解这个开源数据库的精髓,遂想着看看postgresql的源码,以加深对数据库的理解, ...
- [AHOI2009]中国象棋 BZOJ1801 dp
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...