PAT 甲级 1014 Waiting in Line
测试点 4 数据:
2 3 9 9
540 539 1 2 3 4 5 6 7
1 2 3 4 5 6 7 8 9
#include <bits/stdc++.h>
using namespace std;
struct Msg{
int end,cost;
Msg(int _cost):cost(_cost){}
};
vector<Msg> msg;
int main(){
int n,m,k,q,cost;
cin>>n>>m>>k>>q;
for(int i=0;i<k;++i){
cin>>cost;
msg.emplace_back(cost);
}
vector<queue<int>>que(n);
vector<int> back_leave_time(n);
for(int i=0;i<msg.size();++i){
int next=0;
for(int j=0;j<n;++j){
if(que[j].size()<que[next].size()){
next=j;
}
}
if(que[next].size()<m){
msg[i].end=back_leave_time[next]+msg[i].cost;
back_leave_time[next]=msg[i].end;
que[next].push(i);
}else{
int leave_man=0;
for(int j=0;j<n;++j){
if(msg[que[j].front()].end<msg[que[leave_man].front()].end){
leave_man=j;
}
}
que[leave_man].pop();
msg[i].end=back_leave_time[leave_man]+msg[i].cost;
back_leave_time[leave_man]=msg[i].end;
que[leave_man].push(i);
}
}
for(int i=0;i<q;++i){
int query;cin>>query;
int end=msg[query-1].end,beg=msg[query-1].end-msg[query-1].cost;
beg+=8*60,end+=8*60;
if(beg>=17*60) printf("Sorry\n");
else printf("%02d:%02d\n",end/60,end%60);
}
}