看了别人的代码了解了
用queue vector模拟 排队
用now该队最后一个顾客服务后的时间,每次判断一个新顾客进入队列,根据队头客户离开时间最早者该顾客进队
queue front 队头元素
push 入队
pop 出队
#include<iostream>
#include<vector>
#include<queue>
#include<stdio.h>
#include<string.h>
#include<iomanip>
using namespace std;
#define N 25
#define K 1005
#define INF 0x6FFFFFFF
struct node
{
int process;
int leave;
}cus[K];
int main()
{
int n,m,k,q,i,j,min,t,index,mm;
while(scanf("%d%d%d%d",&n,&m,&k,&q)!=EOF)
{
vector<queue<int> >winque(n);
vector<int>now(n,0);
for(i=0;i<k;i++)
scanf("%d",&cus[i].process);
for(i=0;i<k&&i<n*m;i++)
{
cus[i].leave=now[i%n]+cus[i].process;
now[i%n]=cus[i].leave;
winque[i%n].push(i);
}
for(;i<k;i++)
{
min=INF;
for(j=0;j<n;j++)
{
t=winque[j].front();
if(min>cus[t].leave)
{
min=cus[t].leave;
index=j;
}
}
cus[i].leave=now[index]+cus[i].process;
now[index]=cus[i].leave;
winque[index].push(i);
winque[index].pop();
}
/* for(i=0;i<k;i++)
cout<<cus[i].process<<" "<<cus[i].leave<<endl;
cout<<endl;*/
while(q--)
{
cin>>index;
index--;
//cout<<cus[index].leave<<endl;
if(cus[index].leave-cus[index].process<540)//Note that since the bank is closed everyday after 17:00, for those customers who cannot be served before 17:00,
{
t=cus[index].leave/60+8;//17:00未得到服务的不计 所以要看开始时间
mm=cus[index].leave%60;
printf("%02d:%02d\n",t,mm);
}
else
printf("Sorry\n");
}
}
return 0;
}