#include <cstdio>
#include <cstdlib>
typedef struct Application
{
int GI;
int GE;
int GF;
int PS[6];
int ID;
} Application;
typedef struct School
{
int Quota;
int count;
int AppID[4001];
} School;
Application app[40001];
School school[101];
int cmp(const void *a, const void *b)
{
struct Application *c = (Application *)a;
struct Application *d = (Application *)b;
if(c->GF != d->GF)
{
return d->GF - c->GF;
}
else if(c->GE != d->GE)
{
return d->GE - c->GE;
}
}
int cmp2(const void *a,const void *b)
{
return *(int *)a - *(int *)b;
}
int main ()
{
int N,M,K,i,j,SID;
while(scanf("%d %d %d",&N,&M,&K) != EOF)
{
for(i = 0; i < M; i++)
{
scanf("%d",&school[i].Quota);
school[i].count = 0;
}
for(i = 0; i < N; i++)
{
scanf("%d %d",&app[i].GE,&app[i].GI);
app[i].GF = (app[i].GE + app[i].GI) / 2;
for(j = 0; j < K; j++)
{
scanf("%d",&app[i].PS[j]);
}
app[i].ID = i;
}
qsort(app,N,sizeof(app[0]),cmp);
for(i = 0; i < N; i++)
{
for(j = 0; j < K; j++)
{
SID = app[i].PS[j];
if(school[SID].Quota > 0)
{
school[SID].AppID[school[SID].count] = i;
school[SID].count ++;
school[SID].Quota --;
break;
}
else
{
int index = school[SID].AppID[school[SID].count - 1];
if(app[i].GF == app[index].GF && app[i].GE == app[index].GE)
{
school[SID].AppID[school[SID].count] = i;
school[SID].count ++;
school[SID].Quota --;
break;
}
}
}
}
for(i = 0; i < M; i++)
{
for(j = 0; j < school[i].count; j++)
{
school[i].AppID[j] = app[school[i].AppID[j]].ID;
}
}
for(i = 0; i < M; i++)
{
if(school[i].count == 0)
{
printf("\n");
}
else if(school[i].count == 1)
{
printf("%d\n",school[i].AppID[0]);
}
else
{
qsort(school[i].AppID,school[i].count,sizeof(int),cmp2);
int first = 1;
for(j = 0; j < school[i].count; j++)
{
if(first)
{
first = 0;
}
else
{
printf(" ");
}
printf("%d",school[i].AppID[j]);
}
printf("\n");
}
}
}
return 0;
}
1005 Graduate Admission 九度Online Judge
最新推荐文章于 2016-05-26 15:08:57 发布