问题来源

  http://ac.jobdu.com/problem.php?pid=1005

问题描述

  这道题理解题意有些麻烦,多看几遍先理解题意再说。每个学生有自己的三个成绩,一个编号,以及一个志愿列表。每个学校有自己的招生人数限制。按要求输出每所学校最后的招生情况。

问题分析

  我们按照题目要求一个一个来。使用两个结构体分别为Student和School。

typedef struct Student{int id;int GE;int GI;double Final;int choice[6];
}Student;
typedef struct School{int now;//已招人数int Max;//最大人数
    vector admit;
}School;

  把所有的信息输入之后,对学生进行排序,需要重写sort函数的比较函数。
  在录取过程中,所限判断已录取人数和最大录取人数,如果都是0,那别录了直接break。(这是个坑点)
  如果人没录满,那么就录吧,如果已经录满,那么拿出前一个录取人的信息进行比较,相同也可以录进去。
  另外一个坑点在于输出格式,最后不能有空格哦~

参考代码

参考代码:

//
// Created by AlvinZH on 2017/4/27.
// Copyright (c) AlvinZH. All rights reserved.
//

#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;int n,m,k;
typedef struct Student{int id;int GE;int GI;double Final;int choice[6];
}Student;
typedef struct School{int now;//已招人数int Max;//最大人数vector<int> admit;
}School;Student Stu[40005];
School Sch[105];bool cmp(Student a,Student b)
{if(a.Final!=b.Final) return a.Final>b.Final;else return a.GE>b.GE;
}int main()
{while(~scanf("%d%d%d",&n,&m,&k)){for(int i=0;i<m;i++){scanf("%d",&Sch[i].Max);Sch[i].now=0;Sch[i].admit.clear();}for(int i=0;i<n;i++){Stu[i].id=i;scanf("%d %d",&Stu[i].GE,&Stu[i].GI);Stu[i].Final=(Stu[i].GE+Stu[i].GI)/2;for(int j=0;j<k;j++)scanf("%d",&Stu[i].choice[j]);}sort(Stu,Stu+n,cmp);for(int i=0;i<n;i++){for(int j=0;j<k;j++){int quota=Stu[i].choice[j];if(Sch[quota].now==0&&Sch[quota].Max==0) break;else if(Sch[quota].now<Sch[quota].Max){Sch[quota].now++;Sch[quota].admit.push_back(i);break;//已录取,退出
                }else{int lastone=Sch[quota].admit[Sch[quota].now-1];if(Stu[lastone].GE==Stu[i].GE&&Stu[lastone].GI==Stu[i].GI){Sch[quota].now++;Sch[quota].admit.push_back(i);break;//已录取,退出
                    }}}}for(int i=0;i<m;i++)//实际ID还原for(int j=0;j<Sch[i].now;j++)Sch[i].admit[j]=Stu[Sch[i].admit[j]].id;for(int i=0;i<m;i++){if(Sch[i].now==0) printf("\n");else if(Sch[i].now==1) printf("%d\n",Sch[i].admit[0]);else{sort(Sch[i].admit.begin(),Sch[i].admit.end());int flag = 1;for(int j=0;j<Sch[i].now;j++){if(flag) flag=0;else printf(" ");printf("%d",Sch[i].admit[j]);}printf("\n");}}}
}

作者: AlvinZH

出处: http://www.cnblogs.com/AlvinZH/

本人Github:https://github.com/Pacsiy/JobDu

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

转载于:https://www.cnblogs.com/AlvinZH/p/6771713.html

题目1005:Graduate Admission(结构体排序)相关推荐

  1. C语言中对结构体排序

    在C语言中对结构体排序 用qsort()函数进行排序, qsort()里面要传入4个参数–qsort(数组名,数组长度,sizeof(),排序方法) 实验9-5 查找书籍 (20分) 给定n本书的名称 ...

  2. Monkey and Banana HDU - 1069 [ 结构体排序+DP最长不上升子序列 ] 详细题解

    题解目录 1.题目 2.题意 3.思路 4.代码 1.题目 A group of researchers are designing an experiment to test the IQ of a ...

  3. python结构体排序

    文章目录 一个参数比较 多个参数比较 在c/c++中,遇到结构体排序类似的问题时可以直接用struct定义一个结构体,然后重写cmp函数实现结构体排序,而在python中,没有结构体,那么如何实现结构 ...

  4. 用sort对结构体排序

    (一)文字描述 当我们使用sort对结构体进行排序时,我们要首先自己编写一个排序函数,在排序函数中,规定好排序的优先顺序: (二)伪代码展示 1.先写头文件: #include <algorit ...

  5. 结构体排序(sort)

    嘿嘿 个人比较喜欢用结构体来存两个有关联的变量,而不喜欢用二维数组,因为很容易出错,所以,想写一篇关于结构体排序的博客哈哈哈哈哈✪ ω ✪ 头文件 我最经常用的是sort排序,,,这里头文件用的是 # ...

  6. PAT甲级真题(结构体排序)——1012. The Best Rank (25)

    1012. The Best Rank (25) To evaluate the performance of our first year CS majored students, we consi ...

  7. qvector 结构体排序_C++结构体的应用_YCOJ

    结构体是一种自定义的东西,用struct来定义.在他里面, 可以装许多东西,比如int,string,char,bool等等等等. 如: struct a{ string name; int a; i ...

  8. 还是贪心(结构体排序)

    2128: 盾神与积木游戏 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 127 Solved: 39 [Submit][Status][Web Boa ...

  9. sort对结构体排序

    1.排序方法: sort(数组起始指针,数组尾指针,排序规则); 数组起始指针,数组尾指针是左闭右开 排序规则可以省略,也可以用系统的,也可以自己写 2.例子: int a[]={9,2,4,5,10 ...

最新文章

  1. python软件开发-Python -- 软件开发规范
  2. 学python要基础吗-无基础可以学习Python吗?
  3. JS:js 数组赋值问题 :值传递还是引用?
  4. Goldengate的拆分与合并
  5. JS中的异步任务有哪些
  6. python数据可视化是什么_Python数据分析:可视化
  7. window10 安装出现the error code is 2503错误的解决方法
  8. go kegg_玩转GO和KEGG富集因子图的N种姿势: 3种数据处理(含在线筛选条目),3种排序方式,本地交互图片...
  9. Bitdefender Total Security 2014 Free 6 Months 12 month License Key
  10. python计算一定期间的涨幅_python数据分析与挖掘(十一)--- ndarray运算
  11. SAP恭贺德国国家足球队夺冠!
  12. Nginx的configure各项中文说明
  13. 微信开发者工具下载、安装、配置HBuilder运行微信小程序教程(官网)
  14. Visio 2019 专业版安装教程
  15. 2014全国计算机二级visual foxpro,全国计算机等级考试二级_VisualFoxPro语言程序设计_全.pdf...
  16. IntelliJ IDEA文件模板变量
  17. 使用Python进行数独求解(一)
  18. Hexo-NexT主题添加评论功能(来必力、Hypercomments、畅言、友言)
  19. flappy+bird+android源代码,Flappy Bird(安卓版)逆向分析(一)
  20. Error: errCode: -501000 | errMsg: Environment create at tencentcloud cannot access from wx-miniapp

热门文章

  1. IIS日志分析方法及工具
  2. 盛大云主机 就是价格有点贵啊
  3. mysql-proxy完成mysql读写分离
  4. linux下面的安卓模拟器genymotion运行taptap游戏-还没弄完
  5. Projection of Tuple DataSet具体用法
  6. python基于happybase对hbase增删改查-thrift1
  7. opencv书籍调研
  8. const char* p 、char* const p、const (char*) p 理解记忆
  9. qtp连接mysql 无驱动_QTP连接MySQL
  10. 【机器学习】集成学习之梯度提升树GBDT