PAT A1080 graduate admission (30)

来源:互联网 发布:广东省软件协会 编辑:程序博客网 时间:2024/06/05 22:33
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct stut{
int ge,gi,totl,uid;
int apply[5];
int schl;
int rank;
}stu[40010];
struct sch{
int er;
int stuid[40010];
int num;
}school[102];
int cmp(stut a,stut b){
if(a.totl!=b.totl) return a.totl>b.totl;
else return a.ge>b.ge;
}
int cmp1(int a,int b){
return a<b;
}
int main(){
int n,m,k,i,j;
int quo[105];
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<m;i++){
scanf("%d",&quo[i]);
}
for(i=0;i<m;i++){//initial
school[i].num=0;
}
for(i=0;i<n;i++){
scanf("%d%d",&stu[i].ge,&stu[i].gi);
stu[i].totl=(stu[i].ge+stu[i].gi)/2;
stu[i].uid=i;
for(j=0;j<k;j++){
scanf("%d",&stu[i].apply[j]);
}

}
sort(stu,stu+n,cmp);
for(i=0;i<n;i++){
if(i==0) stu[i].rank=1;
else if(stu[i].totl==stu[i-1].totl && stu[i].ge==stu[i-1].ge) stu[i].rank=stu[i-1].rank;
else stu[i].rank=i+1;
for(j=0;j<k;j++){
if(quo[stu[i].apply[j]]>0){
stu[i].schl=stu[i].apply[j];
school[stu[i].apply[j]].er=stu[i].rank;
school[stu[i].apply[j]].stuid[school[stu[i].apply[j]].num++]=stu[i].uid;
quo[stu[i].apply[j]]--;
break;
}else if(quo[stu[i].apply[j]]==0 && stu[i].rank==school[stu[i].apply[j]].er){
school[stu[i].apply[j]].stuid[school[stu[i].apply[j]].num++]=stu[i].uid;
break;
}
}
}
for(i=0;i<m;i++){
sort(school[i].stuid,school[i].stuid+school[i].num,cmp1);
if(school[i].num>0){
for(j=0;j<school[i].num-1;j++){
printf("%d ",school[i].stuid[j]);
}
printf("%d\n",school[i].stuid[j]);
}else printf("\n");

}
return 0;
}
0 0
原创粉丝点击