PAT 1014. 排队等候
原题链接
中等
作者:
YAX_AC
,
2024-11-25 20:51:51
,
所有人可见
,
阅读 2
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
#include<unordered_map>
using namespace std;
const int N = 20;
int n,m,k,Q;
int sum[N];//存储每个窗口的完成时间
queue<int> q[N];//每个窗口对应的队列是什么
int main()
{
cin>>n>>m>>k>>Q;
unordered_map<int,int> hash;//存储询问
for(int i = 1; i<=k; i++)
{
int s;
cin>>s;
int t = 0;
for(int j = 0; j<n; j++)//遍历所有窗口
if(i<=n*m)//前n*m个人
{
if(q[j].size() < q[t].size()) t = j;
}
else
{
//看哪个窗口先有人完成
if(q[j].front() < q[t].front()) t = j;
}
sum[t] += s;//当前窗口总和+s
if(i>n*m) q[t].pop();//有人已经服务完了
q[t].push(sum[t]);//加上当前这个人的完成时间
//完成时间一定要在5点之前
//上午8点到下午5点= 9*60 = 540分钟
if(sum[t] - s < 540) hash[i] = sum[t];//完成时间一定要在5点之前
}
while(Q--)
{
int id;
cin>>id;
if(hash.count(id)) printf("%02d:%02d\n",hash[id]/60+8,hash[id]%60);
else puts("Sorry");
}
return 0;
}