1080. Graduate Admission (30)
来源:互联网 发布:淘宝网男童运动套装 编辑:程序博客网 时间:2024/06/05 06:45
题目地址:http://www.patest.cn/contests/pat-a-practise/1080
#include <cstdio> #include <iostream> #include <vector> #include <set>#include <algorithm>#include <stack>#include <string>#include <queue>#include <unordered_map>#include <iterator>using namespace std;#define N 40005int n , m , kk ;struct data{ int sno ; int ge , gi ,total ; int choices[7]; int rank ; int cno ; bool isLuqu ;};vector<data> students ;int quota[105];vector<int> cstu[105];bool cmp(data d1,data d2){ if(d1.total > d2.total ) return true; if(d1.total == d2.total && d1.ge > d2.ge) return true; return false;}bool cmp2(int x, int y){ return x < y ;}int main(){ //freopen("in.txt", "r", stdin); scanf("%d%d%d",&n , &m , &kk) ; int i , j ; for(i = 0 ; i < m ; i ++) { scanf("%d" , "a[i]); } students.resize(n); for(i = 0 ; i < n ; i ++) { students[i].sno = i ; students[i].isLuqu = false ; scanf("%d%d" , &students[i].ge , &students[i].gi); students[i].total = students[i].ge + students[i].gi ; for(j = 0 ; j < kk ; j++) { scanf("%d" , &students[i].choices[j]); } } sort(students.begin() , students.end() , cmp); unordered_map<int,int> um ; // 学生的sno 在 students数组中的映射 students[0].rank = 1 ; um[students[0].sno]= 0 ; for(i = 1 ; i < n ; i ++) { if(students[i].total == students[i-1].total && students[i].ge == students[i-1].ge) { students[i].rank = students[i-1].rank ; }else{ students[i].rank = i + 1 ; } um[students[i].sno]= i ; } for(i = 0 ; i < n ; i ++) { data stu = students[i]; if(!stu.isLuqu) { for(j = 0 ;j < kk ; j++) { int nowc = stu.choices[j]; // cno if( (int)cstu[nowc].size() < quota[nowc]) { cstu[nowc].push_back(stu.sno); students[i].isLuqu = true; students[i].cno = nowc ; break; }else{ // 下面两句是一样的 这里必须使用um映射 int lastRank = students[ um[cstu[nowc][quota[nowc]-1]] ].rank; //int lastRank = students[ um[cstu[nowc][(int)cstu[nowc].size() - 1]] ].rank; if(stu.rank == lastRank) { cstu[nowc].push_back(stu.sno); students[i].isLuqu = true; students[i].cno = nowc ; break; } } } } } for(i = 0; i < m ; i++) { int len2 = cstu[i].size(); if(len2 > 1) sort(cstu[i].begin() , cstu[i].end() , cmp2); if(len2 == 0) printf("\n"); else{ printf("%d",cstu[i][0]); for(j = 1 ; j < len2 ;j++) printf(" %d",cstu[i][j]); printf("\n"); } } //printf(""); 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)
- 心路历程(一)-自学java两个月心得
- POJ3321 Apple Tree(树状数组 + dfs + 线性表)
- HDU 5381 The sum of gcd 询问区间内所有子区间的GCD和 [暴力法]
- python2.7学习笔记(8) ——模块
- Android OkHttp文件上传与下载的进度监听扩展
- 1080. Graduate Admission (30)
- 在Ubuntu下修改sublime默认模板代码
- 在Centos中安装并配置phpMyAdmin
- 【more effective c++读书笔记】【第5章】技术(2)——限制某个class所能产生的对象数量
- Activity传递数据(四)获得返回数据
- JavaScript-概述
- HDU 2544 最短路(Spfa)
- JAVA基础学习(三)---程序结构与控制、函数与数组入门
- hdu2521