九度 1005 Graduate Admission(二)

2014-11-24 07:13:25 · 作者: · 浏览: 2
i].Recruited=0;
//数据读入
for(i=0; i
scanf("%d",&Schools[i].Quota);
for(i=0; i
scanf("%d%d",&Applicants[i].GE,&GI);
Applicants[i].GF=(Applicants[i].GE+GI)/2;
for(j=0; j
scanf("%d",&Applicants[i].Choices[j]);
Applicants[i].id=i;
CopyApps[i][0]=Applicants[i].GE;
CopyApps[i][1]=Applicants[i].GF;
}
//按GF排序 再按GE排序
qsort(Applicants,AppNum,sizeof(Applicant),cmp);
//按排名安排学校
for(i=0; i
for(j=0; j
int sch=Applicants[i].Choices[j];
if(Schools[sch].Quota==0)//志愿学校不收学生
continue;
else if(Schools[sch].Quota>Schools[sch].Recruited) {
Schools[sch].AppNum[Schools[sch].Recruited++]=Applicants[i].id;
break;//选定学校 继续下一个学生
} else if(Applicants[i].GF==CopyApps[Schools[sch].AppNum[Schools[sch].Recruited-1]][1]
&& Applicants[i].GE==CopyApps[Schools[sch].AppNum[Schools[sch].Recruited-1]][0] ) {
Schools[sch].AppNum[Schools[sch].Recruited++]=Applicants[i].id;
break;
}
}
}
for(i=0; i
if(Schools[i].Recruited)//如果招到人
{
qsort(Schools[i].AppNum,Schools[i].Recruited,sizeof(int),cmp2);
printf("%d",Schools[i].AppNum[0]);
for(j=1; j
{
printf(" %d",Schools[i].AppNum[j]);
}
}
printf("\n");
}
}
return 0;
}
//结构体二级排序 先按GF 再按GE 降序
int cmp(const void *a,const void *b)
{
Applicant *app1=(Applicant*)a;
Applicant *app2=(Applicant*)b;
if(app1->GF != app2->GF)
return app2->GF-app1->GF;
else
return app2->GE-app1->GE;
}
int cmp2(const void *a,const void *b)
{
return *((int*)a)-*((int*)b);
}
/**************************************************************
Problem: 1005
User: windzhu
Language: C++
Result: Accepted
Time:10 ms
Memory:2616 kb
****************************************************************/