1080. Graduate Admission (30)
来源:互联网 发布:凉宫春日 知乎 编辑:程序博客网 时间:2024/06/10 13:34
在处理超出学校名额的情况仍然有可能录取的情况时,为每个学校加入一个变量以指示最后一个录入同学的排名,当后来的同学与这个排名相同时则不再考虑是否名额不够。
#include <iostream>#include <cstdio>#include <vector>#include <algorithm>using namespace std;struct School{int quota;int rank; // the last one's rankvector<int> admits;School() : quota(0), rank(-1){}};struct Student{int id, ge, gi, final, rank;vector<int> choices;Student(int id, int ge, int gi, vector<int> c) : id(id), ge(ge), gi(gi), final((ge+gi)/2), choices(c){}bool operator < (const Student& rhs) const{if(final != rhs.final) return final > rhs.final;else return ge > rhs.ge;}};int main(){int n, m, k;scanf("%d%d%d", &n, &m, &k);vector<School> schools(m);for(int i = 0; i < m; ++i){scanf("%d", &schools[i].quota);}vector<Student> stus;for(int i = 0; i < n; ++i){int ge, gi;vector<int> c(k);scanf("%d%d", &ge, &gi);for(int j = 0; j < k; ++j){scanf("%d", &c[j]);}stus.emplace_back(i, ge, gi, c);}sort(begin(stus), end(stus));for(size_t i = 0; i < stus.size(); ++i){if(i == 0) stus[i].rank = 1;else{if(stus[i].final == stus[i-1].final && stus[i].ge == stus[i-1].ge){stus[i].rank = stus[i-1].rank;}else{stus[i].rank = i+1;}}}for(auto& s : stus){for(auto& c : s.choices){if(schools[c].quota > 0 || schools[c].rank == s.rank){schools[c].admits.push_back(s.id);schools[c].quota--;schools[c].rank = s.rank;break;}}}for(auto& s : schools){sort(begin(s.admits), end(s.admits));bool first = true;for(auto& a : s.admits){if(first) first = false;else printf(" ");printf("%d", a);}printf("\n");}return 0;}
0 0
- 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)
- 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)
- 从零开始搭建架构实施Android项目
- iOS制作自己的静态库(即.a文件)
- 51nod 1007 正整数分组 (类01背包问题)
- Git 学习笔记
- git 版本控制和SourceTree的安装使用 eclipse 的egit 插件安装使用
- 1080. Graduate Admission (30)
- SCU 3172-Fisherman(0-1背包)
- hdu1045 Fire Net(dfs水)
- 实战——简易计算器
- javascript & DHTML cookbook摘抄
- LeetCode:Majority Element
- mysql集群搭建教程-基础篇
- NSDate 实现时间格式刚刚、几分钟前、几小时前、昨天、MM-dd HH:mm:ss
- 2015年度总结