只拿了19分不知为何。所以参考:http://blog.csdn.net/lv_zj/article/details/15809261
#include<iostream>
using namespace std;
class A
{
public:
enum{N=20,M=10,K=1000,max_time=540};
int findmin();
void init();
void run();
void printanswer();
private:
int n,m,k,q;
int windowwait[N][M],visit,needtime[K],outtime[K],countwait,queriesID[K],nowid,timelie[N];
};
void A::init()
{
cin>>n>>m>>k>>q;
int i;
for(i=0;i<k;i++)
cin>>needtime[i];
for(i=0;i<q;i++)
cin>>queriesID[i];
}
int A::findmin()
{
int i,tmp;
tmp=0;
for(i=1;i<n;i++)
if(windowwait[i][0]<windowwait[tmp][0])
tmp=i;
return tmp;
}
void A::run()
{
countwait=0;
int i,j,lieshu;
visit=k;
for(i=0;i<n;i++)
timelie[i]=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(countwait<k)
{
windowwait[j][i]=needtime[countwait];
timelie[j]+=needtime[countwait];
outtime[countwait]=timelie[j];
countwait++;
visit--;
}
else
{
return;
}
}
}
nowid=countwait;
while(visit>0)
{
lieshu=findmin();
int ttt;
ttt=windowwait[lieshu][0];
for(i=0;i<n;i++)
windowwait[i][0]=windowwait[i][0]-ttt;
for(i=0;i<m-1;i++)
{
windowwait[lieshu][i]=windowwait[lieshu][i+1];
}
windowwait[lieshu][m-1]=needtime[countwait];
timelie[lieshu]+=needtime[countwait];
outtime[countwait]=timelie[lieshu];
countwait++;
visit--;
}
}
void A::printanswer()
{
int i,hour,min,ti;
for(i=0;i<q;i++)
{
ti=outtime[queriesID[i]-1];
if(ti<=max_time)
{
hour=8+ti/60;
min=ti%60;
printf("%02d:%02d\n",hour,min);
}
else
printf("Sorry\n");
}
}
int main()
{
A *a=new A;
a->init();
a->run();
a->printanswer();
return 0;
}