#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define ll long long
#define INF 0x3f3f3f3f
#define CLR(a) memset(a, 0, sizeof(a))
using namespace std;
struct node{
int poptime,endtime;
queue<int> q;
};
int N,M,K,Q;
int main() {
int index=1;
cin>>N>>M>>K>>Q;
vector<bool> service(K+1,false);//记录是否能被服务
vector<int> result(K+1); //记录每个人的结束时间
vector<node> window(N+1); //记录窗口的结构体
vector<int> timing(K+1); //输入所用时间
for(int i=1;i<=K;i++){
scanf("%d",&timing[i]);
}
for(int i=1;i<=M;i++){
for(int j=1;j<=N;j++){
if(index<=K){
window[j].q.push(timing[index]);
if(window[j].endtime>=540){
service[index]=true;
}
window[j].endtime+=timing[index];
if(i==1)
window[j].poptime=window[j].endtime;
result[index]=window[j].endtime;
index++;
}
}
}
while(index<=K){
int tmpmin=window[1].poptime,tmpwindow=1;
for(int i=2;i<=N;i++){
if(window[i].poptime<tmpmin){
tmpwindow=i;
tmpmin=window[i].poptime;
}
}
window[tmpwindow].q.pop();//抛出
window[tmpwindow].q.push(timing[index]);
window[tmpwindow].poptime+=window[tmpwindow].q.front();
if(window[tmpwindow].endtime>=540){
service[index]=true;
}
window[tmpwindow].endtime+=timing[index];
result[index]=window[tmpwindow].endtime;
index++;
}
for(int i=1;i<=Q;i++){
int query,minute;
scanf("%d",&query);
minute=result[query];
if(service[query]==true)
printf("Sorry\n");
else
printf("%02d:%02d\n",(minute+480)/60,(minute+480)%60);
}
return 0;
}
PAT(甲级)1014
最新推荐文章于 2021-07-01 16:08:01 发布