大致题意就是有N个学生,有M个学校,每个学校的名额都是正整数。每个学生可以填K个学校志愿,N个学生一起排名以后,排名高的学生先挑学校,不保护一志愿。

题目要求:

首先,把所有学生按总成绩SUM(GE+GI)递减排序,如果SUM相同,那么就按GE递减排序。

然后,根据成绩确定所有学生的名次。如果当前学生与上一个学生的SUM和GE相同,那么当前学生与上一个学生的名次也相同。

确定所有学生的名次以后,从排名第一名的学生的第一个志愿学校开始。

如果该学校有名额,或者该学校没名额了但是该学生与该学校录取的最后一个学生的名次一样,那么就录取这名学生。

否则,该学生继续找下一个志愿学校,直到能找到能被录取的学校(该学校名额减一),或者所有志愿学校找完都无法被录取。

所有学生的志愿学校都找完以后,每个学校按要求递增输出学生编号。(具体不再赘述)

STL:set容器及其函数,sort函数,auto智能指针。

注意点:学生排序以后,学生id与数组i可能不一致了。代码中的last应该存放i(当前访问的学生),而不是学生id。

 #include"iostream"
#include"set"
#include"algorithm"
using namespace std;
struct Student {
int GE,GI,SUM;//考研成绩,面试成绩,总分
int id;//学生编号
int RANK;//排名
int choices[];//k<=5个志愿
} stu[]; struct School {
int quota;//学校名额
set<int> ID;//录取学生编号,set可以自动排序
int last = -;//标记最后一个被录取学生的编号
} sch[]; bool cmp(const Student& a,const Student& b) { //采用引用变量执行更快
if(a.SUM != b.SUM)
return a.SUM > b.SUM;
else
return a.GE > b.GE;
} int main() {
int N,M,K;
scanf("%d%d%d",&N,&M,&K);
for(int i = ; i < M; ++i) {
scanf("%d",&sch[i].quota);
}
for(int i = ; i < N; ++i) {
scanf("%d%d",&stu[i].GE,&stu[i].GI);
for(int j = ; j < K; ++j) {//K个志愿
scanf("%d",&stu[i].choices[j]);
}
stu[i].id = i;//学生id
stu[i].SUM = stu[i].GE + stu[i].GI;//总成绩
}
sort(stu,stu+N,cmp);//对学生进行排名,排序以后id与i就可能不一致了
for(int i = ; i < N; ++i) {//设置每个学生的名次
if(i > && stu[i].SUM == stu[i-].SUM && stu[i].GE == stu[i-].GE) //如果两个学生的SUM和GE相同,那么他们的名次也相同
stu[i].RANK = stu[i-].RANK;
else
stu[i].RANK = i;
}
for(int i = ; i < N; ++i) {
for(int j = ; j < K; ++j) {
int choice = stu[i].choices[j];//当前学生的当前志愿
int last = sch[choice].last;//最后一个被录取的学生
//学校有名额,或者该学校录满了但该学生与已录取的最后一个学生的名次一样时
if(sch[choice].quota > || stu[i].RANK == stu[last].RANK) {
sch[choice].ID.insert(stu[i].id);//录入学生 id
sch[choice].last = i;//记录当前访问了的学生,之前i写成了stu[i].id导致测试点1,2未通过,妹的!!!
sch[choice].quota--;//名额减一
break;
}
}
}
for(int i = ; i < M; ++i) {
int t = sch[i].ID.size();
if(t > ) {
//auto 是C++11里面的新特性,可以让编译器根据初始值类型直接推断变量的类型
for(auto it = sch[i].ID.begin(); it!=sch[i].ID.end(); ++it) {
printf("%d",*it);
if(t-- > ) {
printf(" ");
}
}
}
printf("\n");
}
return ;
}

  

1080 Graduate Admission的更多相关文章

  1. PAT 1080 Graduate Admission[排序][难]

    1080 Graduate Admission(30 分) It is said that in 2011, there are about 100 graduate schools ready to ...

  2. pat 甲级 1080. Graduate Admission (30)

    1080. Graduate Admission (30) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...

  3. PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)

    1080 Graduate Admission (30 分)   It is said that in 2011, there are about 100 graduate schools ready ...

  4. 1080 Graduate Admission——PAT甲级真题

    1080 Graduate Admission--PAT甲级练习题 It is said that in 2013, there were about 100 graduate schools rea ...

  5. 1080. Graduate Admission (30)

    时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It is said that in 2013, there w ...

  6. PAT 1080. Graduate Admission (30)

    It is said that in 2013, there were about 100 graduate schools ready to proceed over 40,000 applicat ...

  7. 1080 Graduate Admission (30)(30 分)

    It is said that in 2013, there were about 100 graduate schools ready to proceed over 40,000 applicat ...

  8. PAT 1080. Graduate Admission

    It is said that in 2013, there were about 100 graduate schools ready to proceed over 40,000 applicat ...

  9. PAT (Advanced Level) 1080. Graduate Admission (30)

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...

  10. PAT甲级1080 Graduate Admission【模拟】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 题意: 模拟高考志愿录取. 考生根据总 ...

随机推荐

  1. js , forEach 用法

    person.forEach((item,index) => { console.log( item.id ); if( id == item.id ){ item.is_selected = ...

  2. 复杂系统架构设计<1>

    这两天开始读由Edward Crawley(爱德华 克劳利).Bruce Cameron(布鲁斯 卡梅隆).Daniel Selva(丹尼尔 塞尔瓦)著作的系统架构,一开始看目录以为是介绍系统软件架构 ...

  3. C#设计模式学习笔记:(6)适配器模式

    本笔记摘抄自:https://www.cnblogs.com/PatrickLiu/p/7640873.html,记录一下学习过程以备后续查用. 一.引言 从今天开始我们开始讲结构型设计模式,结构型设 ...

  4. 简单IOC容器实现

    前言 本文是为了学习Spring IOC容器的执行过程而写,不能完全代表Spring IOC容器,只是简单实现了容器的依赖注入和控制反转功能,无法用于生产,只能说对理解Spring容器能够起到一定的作 ...

  5. Angular4.0环境搭建

    1.安装nodejs 先装nodejs,如果你的电脑已经装过了,最好确认是比较新的版本,否则可能会出问题 下载地址:https://nodejs.org/en/download/ 安装过程很简单,一直 ...

  6. JMeter性能监控插件PerfMon Metrics Collector

    Jmeter性能监控插件由客户端插件和服务器端程序组成. 官方文档及插件下载地址https://jmeter-plugins.org/wiki/PerfMon/ 将插件 plugins-manager ...

  7. [Python自学] Flask框架 (1) (Flask介绍、配置、Session、路由、请求和响应、Jinjia2模板语言、视图装饰器)

    oldboy:s9day114 参考博客:https://www.cnblogs.com/wupeiqi/articles/7552008.html 一.Flask简介 1.安装Flask pip i ...

  8. .Net 程序代码混淆加密工具 ILProtector

    我的项目中某一部分信息比较敏感,但是.Net程序反编译之后连注释都看得到.需要把exe保护起来,如:代码混淆之后再加壳. Bing到一款.Net混淆工具  ILProtector   作为资深工具党, ...

  9. stream重复Key的处理

    Map<String, List<Model>> modelMap = modelList .stream() .collect(Collectors .toMap(model ...

  10. 【37】池化层讲解(Pooling layers)

    池化层(Pooling layers) 除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们来看一下.   先举一个池化层的例子,然后我们再讨论池化层的 ...