#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Stu
{
int id,ge,gi,fin;
vector<int> choice;
};
bool cmp1(Stu& a,Stu& b)
{
return a.fin!=b.fin?a.fin>b.fin:a.ge>b.ge;
}
bool cmp2(Stu& a,Stu& b)
{
return a.id<b.id;
}
int main()
{
//quota[i]表示i校招生名额,cnt[i]表示i校已录取人数
int n,m,k,quota[110],cnt[110]={0};
scanf("%d%d%d",&n,&m,&k);
//stu存储学生信息,sch[i]存储i校录取的学生信息
vector<Stu> stu(n),sch[110];
for(int i=0;i<m;i++)
scanf("%d","a[i]);
for(int i=0;i<n;i++)
{
scanf("%d%d",&stu[i].ge,&stu[i].gi);
stu[i].id=i;
stu[i].fin=stu[i].ge+stu[i].gi;
stu[i].choice.resize(k);
for(int j=0;j<k;j++)
scanf("%d",&stu[i].choice[j]);
}
sort(stu.begin(),stu.end(),cmp1);
for(int i=0;i<n;i++)
{
for(int j=0;j<k;j++)
{
//schid为第i名学生第j个志愿
int schid=stu[i].choice[j];
//lastindex表示schid已录取的学生人数减一(即schid录取的最后一名学生下标)
int lastindex=cnt[schid]-1;
//schid还未录满或者已录满但是当前考生和前一名被录取的考生成绩相同
if(cnt[schid]<quota[schid]||(stu[i].fin==sch[schid][lastindex].fin&&stu[i].ge==sch[schid][lastindex].ge))
{
sch[schid].push_back(stu[i]);
cnt[schid]++;
break;
}
}
}
for(int i=0;i<m;i++)
{
sort(sch[i].begin(),sch[i].end(),cmp2);
for(int j=0;j<cnt[i];j++)
printf("%d%s",sch[i][j].id,j==cnt[i]-1?"":" ");
printf("\n");
}
return 0;
}
PAT 1080 Graduate Admission (30 分)
最新推荐文章于 2021-12-05 16:46:29 发布