PAT 1080. Graduate Admission (平行志愿模拟题)
来源:互联网 发布:海康威视nvr无网络视频 编辑:程序博客网 时间:2024/04/27 08:44
学生总分高的排名在前;
总分相同,GE得分高的排名在前;
GE相同,则排名相同。
注意到,编写<algorithm>里的sort函数所调用的比较函数不能在前两个条件相等时,直接返回true.
知道原理的告诉我声... 我是改成了a.m_number < b.m_number, 即比较学生的id.
friend bool operator< (const Applicant& a, const Applicant& b){int aa = a.m_ge + a.m_gi;int bb = b.m_ge + b.m_gi;if (aa != bb){return aa > bb;} else if (a.m_ge != b.m_ge){return a.m_ge > b.m_ge; } else{return a.m_number < b.m_number; ////// true}}
代码:
#include <cstdio>#include <vector>#include <algorithm>#include <list>using namespace std;struct Applicant{int m_number;int m_ge;int m_gi;list<int> m_choice;friend bool operator== (const Applicant& a, const Applicant& b){return a.m_ge == b.m_ge && a.m_gi == b.m_gi;}friend bool operator< (const Applicant& a, const Applicant& b){int aa = a.m_ge + a.m_gi;int bb = b.m_ge + b.m_gi;if (aa != bb){return aa > bb;} else if (a.m_ge != b.m_ge){return a.m_ge > b.m_ge; } else{return a.m_number < b.m_number; ////// true}}};Applicant applicant[40010];vector<int> school[110];int n, m, k, quota[110];int capacity, ge, gi, choice;void choose_school(int begin, int end){bool full[110];for (int i = 0; i < m; ++ i){full[i] = school[i].size() >= quota[i];}for (int i = begin; i < end; ++ i){for (auto it = applicant[i].m_choice.begin(); it != applicant[i].m_choice.end(); ++ it){if (full[*it] == false){school[*it].push_back( applicant[i].m_number );break;}}}}int main(){scanf("%d%d%d", &n, &m, &k);for (int i = 0; i < m; ++ i){scanf("%d", quota + i);}for (int i = 0; i < n; ++ i){applicant[i].m_number = i;scanf("%d%d", &applicant[i].m_ge, &applicant[i].m_gi);for (int j = 0; j < k; ++ j){scanf("%d", &choice);applicant[i].m_choice.push_back(choice);}}sort(applicant, applicant+n);for (int i = 0; i < n; ){int begin = i;++ i;while (i < n && applicant[i] == applicant[begin]){++ i;}choose_school(begin, i);}for (int i = 0; i < m; ++ i){sort (school[i].begin(), school[i].end());bool first = true;for (size_t j = 0; j < school[i].size(); ++ j){if (first){printf("%d", school[i][j]);first = false;} else{printf(" %d", school[i][j]);}}printf("\n");}return 0;}
0 0
- PAT 1080. Graduate Admission (平行志愿模拟题)
- PAT 1080. Graduate Admission (30)(志愿录取,排序,rank)
- pat 1080. Graduate Admission(排序模拟)
- 【PAT】1080. Graduate Admission
- PAT 1080. Graduate Admission (30)
- PAT 1080. Graduate Admission (30)
- PAT 1080. Graduate Admission (30)
- 【PAT】1080. Graduate Admission (30)
- 1080. Graduate Admission (30) PAT
- pat-1080. Graduate Admission (30)
- pat 1080. Graduate Admission (30) 浙大复试上机第四题
- 1080. Graduate Admission (30)-PAT甲级真题
- PAT (Advanced) 1080. Graduate Admission (30)
- PAT Advanced Level 1080. Graduate Admission (30)
- PAT A 1080. Graduate Admission (30)
- PAT(A) - 1080. Graduate Admission (30)
- 1080. Graduate Admission (30) PAT 甲级
- PAT甲级练习1080. Graduate Admission (30)
- 【Solr4.7.0学习笔记】系列之一:我的第一个Solr程序
- 黑马程序员-自己总结的java学习笔记(1)java语言基础。
- 基本数据结构——链表
- [译]Kinect for Windows SDK开发入门(四):景深数据处理 上
- qt入门之qt移植arm上参数设置
- PAT 1080. Graduate Admission (平行志愿模拟题)
- java中的Boxing和unboxing
- 面向对象开发方式的开源硬件--.NET Gadgeteer
- AAA
- python - try/except/else/finally
- Windows API 串口编程函数介绍
- HBuilder编写html,深度定制Eclipse
- 程序员学习能力提升三要素
- 设计模式之原型模式