问题来源

  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. Spring Boot 、mybatis 、swagger 和 c3p0 整合

    文件路径如下 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  2. Spring boot 、mybatis 和 swagger 整合

    文件路径 添加依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  3. maven pom.xml几个特殊的插件

    1. surefire插件 Maven Surefire 插件有一个 test 目标,该目标被绑定在了 test 阶段.  test 目标执行项目中所有能在 src/test/java 找到的并且文件 ...

  4. PowerDesigner工具建表步骤

    以商场VIP系统中的表为例 先建立管理员用户表 1.双击打开PowerDesigner工具,点File 选择 New Model  打开如下图,选择标红部分,点击OK 2点击选择标红部位Entity ...

  5. Objective-C 学习笔记(一) 语言程序结构

    Objective-C语言程序结构 “Hello World”简单示例 #import <Foundation/Foundation.h> //预处理命令,它告诉Objective-C语言 ...

  6. Redis配置参数汇总

    ==配置文件全解=== ==基本配置daemonize no 是否以后台进程启动databases 16 创建database的数量(默认选中的是database 0) save 900 1 #刷新快 ...

  7. JS——EasyuiCombobox三级联动

    有许多刚接触Easyui中Combobox控件的朋友可能都会遇到的问题:如何将Combobox做成三级联动? 现分享一个三级联动的案例给大家参考参考,经测试能通过.注意Combobox绑定的数据是Js ...

  8. MVC中用jQuery加BootStrap实现动态增加删除文本输入框!

    http://www.freejs.net/article_biaodan_278.html 这是在网上找到方法,我修改了一下实合我的项目,发博只为收藏记录并加深记忆. 修改后效果如下 @model ...

  9. HTTP调用接口方法

    1.创建接口调用方法类 package cn.com.victorysoft.sjzx.Message; import java.io.BufferedReader; import java.io.I ...

  10. CTF web题型解题技巧

    工具集 基础工具:Burpsuite,python,firefox(hackbar,foxyproxy,user-agent,swither等) 扫描工具:nmap,nessus,openvas sq ...