题目1005:Graduate Admission(结构体排序)
问题来源
http://ac.jobdu.com/problem.php?pid=1005
问题描述
这道题理解题意有些麻烦,多看几遍先理解题意再说。每个学生有自己的三个成绩,一个编号,以及一个志愿列表。每个学校有自己的招生人数限制。按要求输出每所学校最后的招生情况。
问题分析
我们按照题目要求一个一个来。使用两个结构体分别为Student和School。
typedef struct Student{
int id;
int GE;
int GI;
double Final;
int choice[];
}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[];
}Student;
typedef struct School{
int now;//已招人数
int Max;//最大人数
vector<int> admit;
}School; Student Stu[];
School Sch[]; 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=;i<m;i++)
{
scanf("%d",&Sch[i].Max);
Sch[i].now=;
Sch[i].admit.clear();
} for(int i=;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)/;
for(int j=;j<k;j++)
scanf("%d",&Stu[i].choice[j]);
}
sort(Stu,Stu+n,cmp); for(int i=;i<n;i++)
{
for(int j=;j<k;j++)
{
int quota=Stu[i].choice[j];
if(Sch[quota].now==&&Sch[quota].Max==) 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-];
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=;i<m;i++)//实际ID还原
for(int j=;j<Sch[i].now;j++)
Sch[i].admit[j]=Stu[Sch[i].admit[j]].id; for(int i=;i<m;i++)
{
if(Sch[i].now==) printf("\n");
else if(Sch[i].now==) printf("%d\n",Sch[i].admit[]);
else
{
sort(Sch[i].admit.begin(),Sch[i].admit.end());
int flag = ;
for(int j=;j<Sch[i].now;j++)
{
if(flag) flag=;
else printf(" "); printf("%d",Sch[i].admit[j]);
}
printf("\n");
}
}
}
}
作者: AlvinZH
出处: http://www.cnblogs.com/AlvinZH/
本人Github:https://github.com/Pacsiy/JobDu
本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
题目1005:Graduate Admission(结构体排序)的更多相关文章
- PAT 甲级 1080 Graduate Admission (30 分) (简单,结构体排序模拟)
1080 Graduate Admission (30 分) It is said that in 2011, there are about 100 graduate schools ready ...
- 洛谷 P1068 分数线划定【结构体排序】
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150%划 ...
- 第m大的身份证号码(局部排序代全局、结构体排序)
第m大的身份证号码(点击) 时间限制: 1 Sec 内存限制: 128 MB ...
- HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序
FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- <algorithm>里的sort函数对结构体排序
题目描述 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签到.签离记录,请根据记录找出当天开门和关门的人. 输入描述: 每天的记录在第一行给出记录的条目数M (M &g ...
- JustOj 2039: 成绩排名 (结构体排序)
题目描述 每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差.所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名.(PS:大豪哥班上有个学霸名叫日天, ...
- PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】
题目链接 https://www.patest.cn/contests/pat-b-practise/1085 思路 结构体排序 要注意几个点 它的加权总分 是 取其整数部分 也就是 要 向下取整 然 ...
- 小球(总结sort和cmp函数、结构体排序)
问题 N: 小球(点击) 时间限制: 1 Sec 内存限制: 128 MB ...
- 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...
随机推荐
- tomcat限制ip访问
context元素添加 <Context> <Valve className="org.apache.catalina.valves.RemoteAddrValve&quo ...
- 8-linux 安装 requests 时 pip install 安装不了
安装提示更新:但是必须要sudo才行: sudo pip install --upgrade pip 安装 requests时有报错:这样写可以: sudo python -m pip install ...
- python decimal和fractions模块
1.简介 默认,浮点数学缺乏精确性 decimal 模块提供了一个 Decimal 数据类型用于浮点数计算.相比内置的二进制浮点数实现 float这个类型有助于金融应用和其它需要精确十进制表达的场合, ...
- mysql 更新替换字符串
update zxg set newlevel = REPLACE(newlevel,'b','') 把表zxg中的newlevel字段中的b删除
- PHP(六)PHP和HTML混合的一种形式
- view添加虚线边框
CAShapeLayer *border = [CAShapeLayer layer]; border.strokeColor = SLColorLine.CGCo ...
- .NET基础 (18)特性
特性1 什么是特性,如何自定义一个特性2 .NET中特性可以在哪些元素上使用3 有哪几种方法可以获知一个元素是否申明某个特性4 一个元素是否可以重复申明同一个特性 特性1 什么是特性,如何自定义一个特 ...
- 单链表(带random指针)深拷贝(Copy List with Random Pointer)
问题: A linked list is given such that each node contains an additional random pointer which could poi ...
- 两段 PHP 代码比较优劣
// 代码一 public function getPCA($level = false) { $results = array(); $where = $level ? " where f ...
- 软件项目第一个Sprint评分
第一组 跑男 跑男组他们设计的是极速蜗牛小游戏,他们的界面背景图片做的挺漂亮,现在为止也实现了大部分功能, 但是我没有太听懂他们的游戏规则. 因为蜗牛出发后,每次碰到屏幕边缘后都会有确定的反弹结果,也 ...