问题来源

  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(结构体排序)的更多相关文章

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

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

  2. 洛谷 P1068 分数线划定【结构体排序】

    题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150%划 ...

  3. 第m大的身份证号码(局部排序代全局、结构体排序)

    第m大的身份证号码(点击) 时间限制: 1 Sec  内存限制: 128 MB                                                             ...

  4. HDOJ 1009. Fat Mouse' Trade 贪心 结构体排序

    FatMouse' Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. <algorithm>里的sort函数对结构体排序

    题目描述 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签到.签离记录,请根据记录找出当天开门和关门的人. 输入描述: 每天的记录在第一行给出记录的条目数M (M &g ...

  6. JustOj 2039: 成绩排名 (结构体排序)

    题目描述 每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差.所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名.(PS:大豪哥班上有个学霸名叫日天, ...

  7. PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】

    题目链接 https://www.patest.cn/contests/pat-b-practise/1085 思路 结构体排序 要注意几个点 它的加权总分 是 取其整数部分 也就是 要 向下取整 然 ...

  8. 小球(总结sort和cmp函数、结构体排序)

    问题 N: 小球(点击) 时间限制: 1 Sec  内存限制: 128 MB                                                               ...

  9. 转载 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法

    转载自:http://www.cnblogs.com/cj695/p/3863142.html sort函数在使用中非常好用,也非常简单,而且效率与冒泡或者选择排序不是一个数量级.本文就sort函数在 ...

随机推荐

  1. MongoDB 自动分片 auto sharding

    MongoDB部署实验系列文章 MongoDB做为NoSQL数据库,最近几年持续升温,越来越多的企业都开始尝试用MongoDB代替原有Database做一些事情.MongoDB也在集群,分片,复制上也 ...

  2. 8-linux 安装 requests 时 pip install 安装不了

    安装提示更新:但是必须要sudo才行: sudo pip install --upgrade pip 安装 requests时有报错:这样写可以: sudo python -m pip install ...

  3. 转载:Candy? 在线性时间内求出素数与欧拉函数

    转载自:http://www.cnblogs.com/candy99/p/6200660.html 2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB ...

  4. 添加普通用户为sudo用户

    https://www.linuxidc.com/Linux/2017-01/139361.htm 1.打开sudoers文件 切换到root用户下,cd root,运行visudo命令,visudo ...

  5. Redis 安装配制

    Redis 安装配制 redis 安装分为单机安装.伪集群安装.集群安装. Redis 下载地址:http://www.redis.cn/download.html Redis 在线测试工具:http ...

  6. .net core利用MySqlBulkLoader大数据批量导入MySQL

    最近用core写了一个数据迁移小工具,从SQLServer读取数据,加工后导入MySQL,由于数据量太过庞大,数据表都过百万,常用的dapper已经无法满足.三大数据库都有自己的大数据批量导入数据的方 ...

  7. XP+Android手机DIY家庭视频点播系统-历时3周全力打造吊丝的幸福生活

    需求场景(纯熟虚构): 1. 哥电脑里有200G电影copy到手机上看没那么大空间,copy一部看一部删除一部,很是不方便也费时间.     2. 小林同学需求比较旺盛但是媳妇总有不方便的时候,家里有 ...

  8. kubernetes 1.6 RBAC访问控制

    一.简介 之前,Kubernetes中的授权策略主要是ABAC(Attribute-Based Access Control).对于ABAC,Kubernetes在实现上是比较难用的,而且需要Mast ...

  9. RocketMQ 自定义文件路径

    一 .1. 修改store路径2. 修改logs路径3. 修改rmq_bk_gc.log路径4. 修改rmq_srv_gc.log路径二 .1. 获取正确的rocketmq 源码2. 地址:https ...

  10. (字典树)Revenge of Fibonacci -- HDU -- 4099

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4099 要用c++交哦, G++ MLE 不是很懂,先粘上慢慢学习 代码: #include<std ...