A[1080]graduate admission

注意这道题内的cmp写法。

#include <cstdio>
#include <algorithm>
using namespace std;
struct Student {int id,rank;//排名和学生编号int ge, gi, sum;//两科分数和总分int cho[7];//每个考生的志愿学校编号
}stu[40010];struct School{int stunum;//现招生人数int quota;//学校招生额度int stuid[40010];//招生idint lastid;//最后招收的学生编号
}sco[105];bool cmpstu(Student a, Student b) {if (a.sum != b.sum)return a.sum > b.sum;else return a.ge > b.ge;
}bool cmpid(int a,int b) {return stu[a].id < stu[b].id;
}
//注意此处的cmp括号内写法,不是要整个结构体根据某个一个条件进行排序,而是结构体内的一个数组根据某一个条件进行排序。此处int main() {int n, m, k;scanf("%d%d%d", &n, &m, &k);for (int i = 0; i < m; i++) {sco[i].stunum = 0;sco[i].lastid = -1;scanf("%d", &sco[i].quota);}//对结构体Scool进行初始化并且录入各校招收的额度for (int i = 0; i < n; i++) {scanf("%d%d", &stu[i].ge, &stu[i].gi);stu[i].id = i;for (int j = 0; j < k; j++) {scanf("%d", &stu[i].cho[j]);}stu[i].sum = stu[i].ge+stu[i].gi;}//对结构体Student的id cho sum ge gi进行初始化sort(stu, stu + n, cmpstu);//按照成绩进行第一次排序for (int i = 0; i < n; i++) {if (i > 0 && stu[i].sum == stu[i - 1].sum&&stu[i].ge == stu[i - 1].ge)stu[i].rank = stu[i - 1].rank;else stu[i].rank = i;}for (int i = 0; i < n; i++) {for (int j = 0; j < k; j++) {int choice = stu[i].cho[j];//选择的学校的编号int last = sco[choice].lastid;//选择学校的最后招收的学生编号int num = sco[choice].stunum;//志愿学校的现招收人数if (num < sco[choice].quota || (last != -1 && stu[i].rank == stu[last].rank)) {sco[choice].lastid = i;sco[choice].stuid[num] = i;sco[choice].stunum++;break;//一旦被录取直接开始处理下一位同学}//此处记录的i是进行第一次排名后的考生下标}//录取的处理完毕,进行对每个学校录取学生按照id从小到大进行排序}for (int i = 0; i < m; i++) {if (sco[i].stunum > 0) { sort(sco[i].stuid, sco[i].stuid + sco[i].stunum, cmpid);//进行第二次排序for (int j = 0; j<sco[i].stunum; j++) {printf("%d", stu[sco[i].stuid[j]].id);if (j < sco[i].stunum - 1){printf(" ");}}}printf("\n");}return 0;}

A[1080]Graduate Admission 两个cmp比较函数两个struct结构体相关推荐

  1. 1080 Graduate Admission

    1.因为这道题第一次认真想了高考录取的规则,对学生按照先总分再gE的原则进行从高到低排序,排名允许重复.再按照排名高到低对每个学生的每个志愿进行遍历,当一个学生处理完,再进行下一个. 2.由于最后是要 ...

  2. 1080 Graduate Admission (30 分)

    1.模拟 2.结构体排序 3.个顶序列赋排名 #include<bits/stdc++.h> using namespace std; vector<vector<int &g ...

  3. 关于set的自定义比较函数的使用及结构体的上下二分用法

    如果set的类型是个结构体 我们需要定义重载函数 ***set 容器模版需要3个泛型参数,如下: template <class Key,class Compare = less <key ...

  4. Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。...

    倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...

  5. 驱动注册的两种方式(一)——file_operations结构体

    使用file_operations结构体进行字符驱动设备的注册/注销: #include <linux/module.h> //module_init() & module_exi ...

  6. 1080 Graduate Admission (30分)

    题目 It is said that in 2011, there are about 100 graduate schools ready to proceed over 40,000 applic ...

  7. 1080 Graduate Admission (30 分)【难度: 一般 / 知识点: 模拟 排序】

    https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 先总的排序,再枚举每一个学生,对于每一个学生 ...

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

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

  9. PAT 1080. Graduate Admission (30) 模拟高考志愿录取规则

    再次1A hahah /************************* 题意: 高考选志愿. 每个人有Ge和Gi, 最终分数是Gf. 比较方式是先看Gf,再看Ge 每个人k个志愿. 每个学校有一定 ...

  10. 用JAVA定义两个结构体_c语言struct结构体的定义和使用

    c语言由于不像java,c#,c++等语言有对象,所以就用struct结构体来表示,其实作用是差不多的,下面来快速学习c语言struct结构体的定义和使用,以学生类student来举例,有三种定义方式 ...

最新文章

  1. 随机森林 java_机器学习weka,java api调用随机森林及保存模型
  2. C++用数组和链表分别实现Stack
  3. MongoDB 的 upsert
  4. 转:Tomcat启动失败 提示Server Tomcat v7.0 Server at localhost failed to start.六种解决方法
  5. 域账号更改密码之后代理需要重新配置
  6. Linux一个命令创建多个目录:seq命令
  7. java成绩前五名的代码_java 如何选出成绩排前5名的学生呢
  8. Exchange server 2010系列教程之四 如何卸载exchange server 2010
  9. 软件测试基础知识【归纳】
  10. 视频专辑:Web Service视频教程
  11. 获取JQuery UI tabs中被选中的tabs的方法
  12. oracle rownum的使用
  13. 实验七matlab数值计算,数学应用软件实验报告---MATLAB的数值计算
  14. UCSC 基因组浏览器配置详解
  15. 为什么阿里不推荐使用MySQL分区表?
  16. CSS3中设置元素转换中心点
  17. 摩尔斯电码 — 摩尔斯密码
  18. MATLAB Simulink开发ROS无人车与机器人应用 详细教程
  19. 【专题5: 硬件设计】 之 【15.RC滤波电路】
  20. 特殊的一些vi指令(快捷键)

热门文章

  1. elasticsearch批量数据导入和导出
  2. sysbench 0.5 oltp测试笔记
  3. ubuntu下用户的创建、修改
  4. 逻辑卷、物理卷、卷组
  5. php7 magento速度优化,7个更快的加载速度的Magento优化快速提示
  6. java 虚拟机 分析_Java 虚拟机中的运行时数据区分析
  7. 什么标签用于在表单中构建复选框_以下 ( ) 标签用于在表单中构建复选框 。_IP通信技术答案_学小易找答案...
  8. dom4j解析xml_JAVADom、Sax解析XML详解
  9. ajax zlib,jQuery递增地读取Ajax流吗?
  10. The file is absent or does not have execute permission This file is needed to run this program