#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct school{
int quota,last;
vector<int>admitted;
};
struct applicant{
int id,Ge,Gi,G,prefer[5],rnk;
};
int N,M,K;//N学生数,M学校数,K志愿数
school s[100];
applicant a[40000];
bool comp(applicant x,applicant y){
if(x.G!=y.G)return x.G>y.G;
return x.Ge>y.Ge;
}
int main()
{
int i,j;
cin>>N>>M>>K;
for(i=0;i<M;i++)cin>>s[i].quota;
for(i=0;i<N;i++){
cin>>a[i].Ge>>a[i].Gi;
for(j=0;j<K;j++)cin>>a[i].prefer[j];
a[i].G=a[i].Ge+a[i].Gi;
a[i].id=i;
}//输入
sort(a,a+N,comp);
for(i=0;i<N;i++){
if(i==0||(a[i].G!=a[i-1].G||a[i].Ge!=a[i-1].Ge))a[i].rnk=i+1;
else a[i].rnk=a[i-1].rnk;
}//生成排名
for(i=0;i<N;i++){
for(j=0;j<K;j++){
int k=a[i].prefer[j];//报考学校k
if(s[k].admitted.size()<s[k].quota||a[i].rnk==a[s[k].last].rnk){
s[k].admitted.emplace_back(a[i].id);
s[k].last=i;
break;
}
}
}
for(i=0;i<M;i++){
sort(s[i].admitted.begin(),s[i].admitted.end());
for(j=0;j<s[i].admitted.size();j++){
if(j)cout<<' ';
cout<<s[i].admitted[j];
}
cout<<endl;
}
}
1080 Graduate Admission
最新推荐文章于 2025-06-09 20:45:18 发布