题目1005:Graduate Admission
来源:互联网 发布:浙江大学有线网络 编辑:程序博客网 时间:2024/05/16 05:52
/********************************* * 日期:2013-2-27* 作者:SJF0115 * 题号: 九度OJ 题目1005:Graduate Admission* 来源:http://ac.jobdu.com/problem.php?pid=1005* 结果:AC * 来源:2011年浙江大学计算机及软件工程研究生机试真题* 总结: **********************************/ #include <stdio.h>#include <stdlib.h>//结构体typedef struct Application{int GI;//复试成绩int GE;//初试成绩int GF;//总成绩int PS[6];//偏爱的学校int ID;//编号}Application;typedef struct School{int Quota;//学校名额int count;//实际招收人数int AppID[4001];//招收人的ID}School;Application app[40001];School school[101];//排序函数int cmp(const void *a, const void *b){struct Application *c = (Application *)a;struct Application *d = (Application *)b;if(c->GF != d->GF){return d->GF - c->GF;}else if(c->GE != d->GE){return d->GE - c->GE;}}int cmp2(const void *a,const void *b){return *(int *)a - *(int *)b;}int main () {//N the total number of applicants;//M the total number of graduate schools//K the number of choices an applicant may have. int N,M,K,i,j,SID; while(scanf("%d %d %d",&N,&M,&K) != EOF){//每个学校的名额for(i = 0;i < M;i++){scanf("%d",&school[i].Quota);school[i].count = 0;}for(i = 0;i < N;i++){//初试成绩 复试成绩scanf("%d %d",&app[i].GE,&app[i].GI);//总成绩app[i].GF = (app[i].GE + app[i].GI) / 2;//偏爱的学校for(j = 0;j < K;j++){scanf("%d",&app[i].PS[j]);}app[i].ID = i;}//for//排序qsort(app,N,sizeof(app[0]),cmp);//安排招生for(i = 0;i < N;i++){for(j = 0;j < K;j++){SID = app[i].PS[j];//如果SID学校还没有招满if(school[SID].Quota > 0){school[SID].AppID[school[SID].count] = i;school[SID].count ++;school[SID].Quota --;break;}//已经招满else{//最后一个招生人的IDint index = school[SID].AppID[school[SID].count - 1];//如果所有成绩都一样,即使学校已经招满一样被录取if(app[i].GF == app[index].GF && app[i].GE == app[index].GE){school[SID].AppID[school[SID].count] = i;school[SID].count ++;school[SID].Quota --;break;}}}//for}//forfor(i = 0;i < M;i++){for(j = 0;j < school[i].count;j++){school[i].AppID[j] = app[school[i].AppID[j]].ID;}}//输出学校招收情况for(i = 0;i < M;i++){//该学校没有招收到学生if(school[i].count == 0){printf("\n");}//该学校招收到1名学生else if(school[i].count == 1){printf("%d\n",school[i].AppID[0]);}//该学校招收到大于1名学生,需排序安编号大小输出else{//排序输出qsort(school[i].AppID,school[i].count,sizeof(int),cmp2);int first = 1;for(j = 0;j < school[i].count;j++){if(first){first = 0;}else{printf(" ");}printf("%d",school[i].AppID[j]);}printf("\n");}}//for }//while return 0;}
注意:
考虑到边界条件比如
11 6 3
0 0 0 2 2 3
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
100 100 0 1 2
学校0,1,2招生人数都为零,11个学生没一个能录取。
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- 题目1005:Graduate Admission
- JD_OJ 题目1005:Graduate Admission
- 算法练习-题目1005:Graduate Admission
- 【九度】题目1005:Graduate Admission
- 九度OJ--题目1005:Graduate Admission
- 九度 题目1005:Graduate Admission
- 九度题目1005:Graduate Admission
- 九度 oj 题目1005:Graduate Admission
- [Jobdu] 1005:Graduate Admission
- 1005—Graduate Admission
- POJ1321--棋盘问题
- 移动UI设计中的7种主要导航模式
- 获取手机设备的唯一码(IMIE )
- alt+/ 的提示
- PostgreSQL安装小记
- 题目1005:Graduate Admission
- namespace C++
- git 命令的使用(一)
- matlab如何将矩阵数据转换成txt文件保存
- 同一weblogic下配置多个domain
- 传真SIP会话发起协议(SIP)
- Signals框架介绍(一)基本用法
- syslog-ng基础
- poj 1014 Dividing