模拟队列,注意最晚可以是16:59到达服务到17:59
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
#define INF 0x6FFFFFF
struct customer{
int process;
int leave;
};
int main(){
int N,M,K,Q;
scanf("%d%d%d%d",&N,&M,&K,&Q);
vector<customer> cus(K);
for(int i=0;i<K;i++){
scanf("%d",&cus[i].process);
cus[i].leave=INF;
}
vector<queue<int> > winQueue(N);
int timeBase[N];//记录每个窗口队列最后结束时间
memset(timeBase,0,sizeof(timeBase));
int p;
for(p=0;p<N*M && p<K;p++){
cus[p].leave=timeBase[p%N]+cus[p].process;
timeBase[p%N]=cus[p].leave;
winQueue[p%N].push(p);
}
for(;p<K;++p){
int minn=INF;
int index=-1;
for(int j=0;j<N;j++){
int top=winQueue[j].front();
if(minn>cus[top].leave){
index=j;
minn=cus[top].leave;
}
}
cus[p].leave=timeBase[index]+cus[p].process;
timeBase[index]=cus[p].leave;
winQueue[index].pop();
winQueue[index].push(p);
}
for(int i=0;i<Q;i++){
int q;
scanf("%d",&q);
q--;
if(cus[q].leave-cus[q].process >=540)
printf("Sorry\n");
else
printf("%02d:%02d\n",8+cus[q].leave/60,cus[q].leave%60);
}
return 0;
}
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
typedef long long LL;
const int INF = 0x7FFFFFFF;
const int maxn = 1e3 + 10;
int T, a, b, n, q, x, t[maxn];
queue<int> p[maxn];
struct point
{
int x, y;
point(int x = 0, int y = 0) :x(x), y(y){}
}f[maxn];
int main()
{
scanf("%d%d%d%d", &a, &b, &n, &q);
for (int i = 1; i <= n; i++)
{
scanf("%d", &x);
int minx = 1;
for (int j = 1; j <= a; j++)
{
if (i <= a*b)
{
if (p[j].size() < p[minx].size()) minx = j;
}
else if (p[j].front() < p[minx].front()) minx = j;
}
t[minx] += x;
p[minx].push(t[minx]);
if (i > a*b) p[minx].pop();
if (t[minx] - x < 540) f[i] = point(8 + t[minx] / 60, t[minx] % 60);
else f[i] = point(18, 0);
}
while (q--)
{
scanf("%d", &x);
if (f[x].x < 18) printf("%02d:%02d\n", f[x].x, f[x].y);
else printf("Sorry\n");
}
return 0;
}