【PAT甲级】1014 Waiting in Line (30 分)(队列维护)
题面:
输入四个正整数N,M,K,Q(N<=20,M<=10,K,Q<=1000),N为银行窗口数量,M为黄线内最大人数,K为需要服务的人数,Q为查询次数。输入K个正整数,分别代表每位顾客需要被服务的时间,Q次查询每次查询一位顾客被服务完离开银行的时间。如果他在五点以前(不包括五点)没有开始被服务,输出“Sorry”。
trick:
在五点以前(不包括五点)没有开始被服务,输出“Sorry”,而不是被服务完时间在五点以后(以题面为准)。
AAAAAccepted code:
#include<bits/stdc++.h>
using namespace std;
int a[];
queue<pair<int,int> >qu[];
int ans[];
int quy[];
int sum[];
int main(){
int n,m,k,q;
cin>>n>>m>>k>>q;
for(int i=;i<=k;++i)
cin>>a[i];
for(int i=;i<=q;++i)
cin>>quy[i];
for(int i=;i<=m;++i)
for(int j=;j<=n;++j)
if((i-)*n+j<=k)
qu[j].push({a[(i-)*n+j],(i-)*n+j});
int flag=m*n+;
while(){
int mn=1e9;
for(int i=;i<=n;++i)
if(!qu[i].empty()&&qu[i].front().first+sum[i]<mn)
mn=qu[i].front().first+sum[i];
if(mn==1e9)
break;
for(int i=;i<=n;++i)
if(!qu[i].empty()&&qu[i].front().first+sum[i]==mn){
if(sum[i]>=)
ans[qu[i].front().second]=-;
else{
sum[i]=mn;
ans[qu[i].front().second]=sum[i];
}
qu[i].pop();
if(flag<=k){
qu[i].push({a[flag],flag});
flag++;
}
}
}
for(int i=;i<=q;++i){
int hour=ans[quy[i]]/+;
int minute=ans[quy[i]]%;
if(ans[quy[i]]==-)
cout<<"Sorry";
else{
if(hour<)
cout<<""<<hour<<":";
else
cout<<hour<<":";
if(minute<)
cout<<""<<minute;
else
cout<<minute;
}
cout<<"\n";
}
return ;
}
【PAT甲级】1014 Waiting in Line (30 分)(队列维护)的更多相关文章
- 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 ...
- PAT A 1014. Waiting in Line (30)【队列模拟】
题目:https://www.patest.cn/contests/pat-a-practise/1014 思路: 直接模拟类的题. 线内的各个窗口各为一个队,线外的为一个,按时间模拟出队.入队. 注 ...
- PAT甲级1014. Waiting in Line
PAT甲级1014. Waiting in Line 题意: 假设银行有N个窗口可以开放服务.窗前有一条黄线,将等候区分为两部分.客户要排队的规则是: 每个窗口前面的黄线内的空间足以包含与M个客户的一 ...
- 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 ...
- PAT 1014 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 ...
- 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甲级——1131 Subway Map (30 分)
可以转到我的CSDN查看同样的文章https://blog.csdn.net/weixin_44385565/article/details/89003683 1131 Subway Map (30 ...
- PAT 甲级 1076 Forwards on Weibo (30分)(bfs较简单)
1076 Forwards on Weibo (30分) Weibo is known as the Chinese version of Twitter. One user on Weibo m ...
随机推荐
- 解决docker: error pulling image configuration: Get https://registry-1.docker.io/v2/library/mysql/: TLS handshake timeout.
出现这个问题,一般的原因是无法连接到 docker hub,通过: systemctl stop docker echo "DOCKER_OPTS=\"\$DOCKER_OPTS ...
- 自编C++游戏
背景 周末无聊,于是编了一个类似于cmd的小玩意. 可是越想越不对劲,所以把它改成了一个小游戏. 信息 语言:DEV_C++ 源代码已公布!! 打败GG 版本:1.0(正式版) 版本:1.5(番外) ...
- as中怎么下载更新platforms和build-tools
链接:https://blog.csdn.net/sunbinkang/article/details/78632652
- java使用bitmap求两个数组的交集
一般来说int代表一个数字,但是如果利用每一个位 ,则可以表示32个数字 ,在数据量极大的情况下可以显著的减轻内存的负担.我们就以int为例构造一个bitmap,并使用其来解决一个简单的问题:求两个数 ...
- PHPExcel 导出图片
$objDrawing = new PHPExcel_Worksheet_Drawing(); // 本地图片文件路径 $objDrawing->setPath('/www/images/img ...
- leetCode练题——27. Remove Element
1.题目 27. Remove Element——Easy Given an array nums and a value val, remove all instances of that valu ...
- 「JSOI2013」贪心的导游
「JSOI2013」贪心的导游 传送门 多次询问区间内%一个数的最大值 我们不妨设这个数为M_sea 值域比较小所以考虑分块维护. 我们观察到对于给定的一个 \(p\) ,函数 \(y = x \% ...
- jq 常用语句
//jq post 请求 $.post("demo_ajax_gethint.asp",{suggest:txt},function(result){ }); // jq get ...
- 解析-analysis
解析-analysis 1. 解析-analysis 可以理解为分词. 解析由解析器——analyzer执行,解析器包括内置和用户自定义两种. 1.1. 解析器 1.1.1. 内置 ...
- sql 中u.*什么意思
i.* i是一个表的别名,i.*是这个表的所有列,比如 select i.* from customer i; 相当于 select id,name,password from customer;