问题来源

  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. [模板]tarjan缩点+拓扑排序

    题目:给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 题目简述:先t ...

  2. [Laravel] mac下通过 homestead 搭建环境 到运行项目

    seven_Android 关注 2017.07.03 21:33* 字数 2240 阅读 3464评论 10喜欢 9 之前学习过一段时间的 Laravel ,换 mac 后一直没空做相关的事情,而且 ...

  3. tomcat运行为什么要依靠jdk

    问题1:为什么要装jdk 因为tomcat是用java写的,所以运行需要JRE,就是JAVA运行时刻环境,所以必须通过安装JDK来得到这个运行环境,不装JDK装JRE也行,sun的网站上有下载.但是J ...

  4. Linux的进程与服务(一)

    启动的配置文件/etc/inittab,修改完配置文件以后 init q立即生效 # Default runlevel. The runlevels used by RHS are: # - halt ...

  5. db_autopwn

    nmap -Pn -sV -oX dmz 192.168.1.0/24 db_import /root/dmz db_hosts db_hosts -d ip db_services db_hosts ...

  6. Quartus II 软件生成FFT、NCO、FIR等IP核时卡住不动的解决办法

    据网友表示,遇到这个问题时,在任务管理器中手动关闭quartus_map进程就可以了,由于我的电脑最近一直没有出问题,因此也无法验证.欢迎大家针对这个问题讨论,提出肯定.否定的说法. 另外,很多人表示 ...

  7. Java Float类型 减法运算时精度丢失问题

    package test1; public class Test2 { /*** @param args*/public static void main(String[] args) {   Flo ...

  8. Python学习-14.Python的输入输出(三)

    在Python中写文件也是得先打开文件的. file=open(r'E:\temp\test.txt','a') file.write('append to file') file.close() 第 ...

  9. sitecore 缓存管理器

    namespace XXX.Shared.Infrastructure.Caching { using System; using System.Collections.Generic; using ...

  10. solr特点三: 排序样例汇总

    目的是提供solrj 实现 查询的样例参考 单维度排序 //查询条件 query.setQuery(queryString); // add 是添加 query.addSortField(field_ ...