#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
using namespace std;
struct stu
{
int GE;
int GI;
int score;
int ranks;
int id;
int choices[6];
}App[40010];
struct school
{
int quota;
int stuNum;
int best;
int id[40010];
}Schools[110];
bool cmp(stu a,stu b)
{
if(a.score != b.score) return a.score>b.score;
else return a.GE>b.GE;
}
int main()
{
int N=0,M=0,K=0;
int i=0,j=0,temp=0,x=0,y=0,z=0;
scanf("%d%d%d",&N,&M,&K);
for(i=0; i<M; i++)
{
scanf("%d",&temp);
Schools[i].quota = temp;
}
for(j=0; j<N; j++)
{
scanf("%d%d",&App[j].GE,&App[j].GI);
App[j].score = (App[j].GE + App[j].GI)/2;
App[j].id = j;
for(i=0; i<K; i++)
{
scanf("%d",&App[j].choices[i]);
}
}
sort(App, App+N, cmp);
App[0].ranks = 1;
for(i=1; i<N; i++)
{
if(App[i].score == App[i-1].score && App[i].GE == App[i-1].GE)
App[i].ranks = App[i-1].ranks;
else
App[i].ranks = i+1;
}
for(i=0; i<N; i++)
{
for(j=0; j<K; j++)
{
x = App[i].choices[j];
if(Schools[x].stuNum < Schools[x].quota || Schools[x].best == App[i].ranks) //没招满,或者有同样优秀的人
{
y = Schools[x].stuNum;
Schools[x].id[y] = App[i].id; //在数组里存储录取的学号
Schools[x].stuNum += 1; //录取人数加1
Schools[x].best = App[i].ranks;
break; //录取了一个,跳出循环
}
}
}
for(i=0; i<M; i++)
{
if(Schools[i].stuNum!=0)
{
sort(Schools[i].id,Schools[i].id+Schools[i].stuNum);
for(j=0; j<Schools[i].stuNum; j++)
{
if(j==0)
printf("%d",Schools[i].id[j]);
else
printf(" %d",Schools[i].id[j]);
}
}
printf("\n");
}
return 0;
}
1080. Graduate Admission (30)
最新推荐文章于 2021-08-23 17:08:57 发布