#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node{
int pop;
int front;
int qe[15];
int rear;
}a[25];
int cmp ( const void *a , const void *b )
{
return (*(struct node *)a).pop - (*(struct node *)b).pop;
}
int main()
{
int n,m,k,q,j,i;
scanf("%d %d %d %d",&n,&m,&k,&q);
int x[k+5],b[q+5],t[1000+5],end[1000+5];
for(i=1;i<=k;i++){
scanf("%d",&x[i]);
}
for(i=1;i<=q;i++){
scanf("%d",&b[i]);
}
if(n>k){
for(i=1;i<=k;i++)
t[i]=x[i];
for(i=1;i<=q;i++){
if(t[b[i]]<=540){
int h=t[b[i]]/60;
int min=t[b[i]]-h*60;
printf("%02d",h+8);
printf(":");
if(min>0)
printf("%02d\n",min);
if(min==0)
printf("00\n");
}
else printf("Sorry\n");
}}
else{
for(i=0;i<n;i++){
a[i].front=0;
a[i].rear=m-1;
}
for(i=1;i<=n*m;i++){
int r,y;
if(i%n==0){
r=n-1;
y=i/n-1;
}
if(i%n!=0){
r=i%n-1;
y=i/n;}
a[r].qe[y]=x[i];
a[r].pop=a[r].qe[0];
int sum=0;
for(j=0;j<=y;j++){
sum=sum+a[r].qe[j];
}
t[i]=sum;
end[i]=sum-a[r].qe[a[r].rear];
}
for(i=n*m+1;i<=k;i++){
qsort(a,n,sizeof(a[0]),cmp);
a[0].front++;
a[0].pop=a[0].qe[a[0].front];
a[0].qe[++a[0].rear]=x[i];
int s=0;
for(j=0;j<=a[0].rear;j++){
s=s+a[0].qe[j];
}
t[i]=s;
end[i]=s-a[0].qe[a[0].rear];
}
for(i=1;i<=q;i++){
if(end[b[i]]<540){
int h=t[b[i]]/60;
int min=t[b[i]]-h*60;
printf("%02d",h+8);
printf(":");
if(min>0)
printf("%02d\n",min);
if(min==0)
printf("00\n");
}
else printf("Sorry\n");
}}
}
自己测试过的数据:
2 2 7 5
1 2 6 4 3 533 129
3 4 5 6 7
输出
08:07
08:06
08:10
16:59
19:08
输入:
20 20 1 1
8
1
输出:
08:08
测试样例可通过。