PAT1080 Graduate Admission (30)
来源:互联网 发布:冰箱什么牌子静音 知乎 编辑:程序博客网 时间:2024/06/05 21:53
题目链接:
http://www.nowcoder.com/pat/5/problem/4310
题目描述:
(1)分数分为Ge和Gi两部分,按照总分给学生排名次,如果总分一样,则按照Ge来排;
(2)每个学生都有几个志愿,按照志愿高低给学生分配学校;
(3)对于名次一样又报了同一学校的学生,该学校只要接收了一个就得接收全部,即便超出了原定的招生名额;
题目分析:
每次模拟题写得总是很冗长的感觉啊。
需要注意的是写学校选学生那部分。
代码:
#include<iostream>#include<vector>#include<string.h>#include<algorithm>#include<set>using namespace std;struct Student{ int stuID; int GE; int GI; int EI; int rank; vector<int> preferred;};bool operator <(const Student& stu1,const Student& stu2){ return stu1.EI == stu2.EI ? stu1.GE>stu2.GE:stu1.EI > stu2.EI;}struct School{ int quota; int lowest; set<int> admission;};int main(){ int N, M, K; scanf("%d%d%d",&N,&M,&K); Student* graduates = new Student[N]; School* schools = new School[M]; for (int i = 0; i < M; i++){ scanf("%d",&schools[i].quota); } for (int i = 0; i < N; i++){ scanf("%d%d",&graduates[i].GE,&graduates[i].GI); graduates[i].EI = graduates[i].GE + graduates[i].GI; graduates[i].stuID = i; int prefer; for (int j = 0; j < K;j++){ scanf("%d",&prefer); graduates[i].preferred.push_back(prefer); } } sort(graduates,graduates+N); for (int i = 0; i < N; i++){ if (i>0 && graduates[i].EI == graduates[i - 1].EI && graduates[i].GE == graduates[i - 1].GE){ graduates[i].rank = graduates[i - 1].rank; } else{ graduates[i].rank = i + 1; } for (int j = 0; j < K; j++){ int schID = graduates[i].preferred[j]; if (schools[schID].quota>0 || graduates[i].rank == schools[schID].lowest){ schools[schID].lowest = graduates[i].rank; schools[schID].quota--; schools[schID].admission.insert(graduates[i].stuID); break; } } } for (int i = 0; i < M; i++){ if (schools[i].admission.empty()){ printf("\n"); } else{ auto it = schools[i].admission.begin(); printf("%d",*it++); for (;it!=schools[i].admission.end(); it++){ printf(" %d",*it); } printf("\n"); } } return 0;}
0 0
- PAT1080 Graduate Admission (30)
- pat1080 graduate admission
- pat1080 Graduate Admission
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- A1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- 1080. Graduate Admission (30)
- viewFlipper小页面的滑动效果
- Socket 模拟Http协议发送图片文件 c#篇
- 鸟哥私房菜大二暑假
- Java 工厂模式设计
- highchart 二维数组相关
- PAT1080 Graduate Admission (30)
- iOS粘性拖拽红点动画研究
- 结束终端
- android studio内存分析初探
- Arch
- @SuppressWarnings(unchecked)作用解释文档
- Base64和3DES加密算法原理
- ant build.xml
- weblogic集群负载分发模块mod_wl_22.so参数说明