PAT (Basic Level) Practise (中文)- 1015. 德才论 (25)
http://www.patest.cn/contests/pat-b-practise/1015
宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人。”
现给出一批考生的德才分数,请根据司马光的理论给出录取排名。
输入格式:
输入第1行给出3个正整数,分别为:N(<=105),即考生总数;L(>=60),为录取最低分数线,即德分和才分均不低于L的考生才有资格被考虑录取;H(<100),为优先录取线——德分和才分均不低于此线的被定义为“才德全尽”,此类考生按德才总分从高到低排序;才分不到但德分到线的一类考生属于“德胜才”,也按总分排序,但排在第一类考生之后;德才分均低于H,但是德分不低于才分的考生属于“才德兼亡”但尚有“德胜才”者,按总分排序,但排在第二类考生之后;其他达到最低线L的考生也按总分排序,但排在第三类考生之后。
随后N行,每行给出一位考生的信息,包括:准考证号、德分、才分,其中准考证号为8位整数,德才分为区间[0, 100]内的整数。数字间以空格分隔。
输出格式:
输出第1行首先给出达到最低分数线的考生人数M,随后M行,每行按照输入格式输出一位考生的信息,考生按输入中说明的规则从高到低排序。当某类考生中有多人总分相同时,按其德分降序排列;若德分也并列,则按准考证号的升序输出。
输入样例:
- 14 60 80
- 10000001 64 90
- 10000002 90 60
- 10000011 85 80
- 10000003 85 80
- 10000004 80 85
- 10000005 82 77
- 10000006 83 76
- 10000007 90 78
- 10000008 75 79
- 10000009 59 90
- 10000010 88 45
- 10000012 80 100
- 10000013 90 99
- 10000014 66 60
输出样例:
- 12
- 10000013 90 99
- 10000012 80 100
- 10000003 85 80
- 10000011 85 80
- 10000004 80 85
- 10000007 90 78
- 10000006 83 76
- 10000005 82 77
- 10000002 90 60
- 10000014 66 60
- 10000008 75 79
- 10000001 64 90
- 1. 数据量为10的5次方-》QS排序
2. 每人有效信息复杂-》比较/复制/交换等单独写成小函数
- #include<stdio.h>
- int pk(int (&student1)[],int (&student2)[])//int *student1[],int *student2[])
- {
- if(student1[]+student1[] > student2[]+student2[])
- return ;
- else if(student1[]+student1[] == student2[]+student2[])
- {
- if(student1[] > student2[] )
- return ;
- else if(student1[] == student2[] && student1[]<student2[])
- return ;
- }
- return ;//zongfendi
- }
- void copy(int (&student1)[],int (&student2)[])
- {
- /*zhengjian=student1[0];
- defen=student1[1];
- caifen=student1[2]; */
- student1[]=student2[];
- student1[]=student2[];
- student1[]=student2[];
- /*student2[0]=zhengjian;
- student2[1]=defen;
- student2[2]=caifen; */
- }
- void QS(int (&student)[][],int low,int high)
- {
- int temp[]={student[low][],student[low][],student[low][]};
- int l=low,h=high;
- while(l<h)
- {
- while( pk(temp,student[h]) && h>l)
- h--;
- if( pk(student[h],temp))
- {
- copy(student[l],student[h]);
- copy(student[h],temp);
- l++;
- }
- while(pk(student[l],temp)&& l<h)
- l++;
- if(pk(temp,student[l]))
- {
- copy(student[h],student[l]);
- copy(student[l],temp);
- h-- ;
- }
- }
- if(l->low) QS(student,low,l-);
- if(h+<high)QS(student,h+,high);
- return;
- }
- int main()
- {
- int n=,low=,high=;
- int num[]={},student[][][]={{{,,}}}; // 0准考证号 1德 2才
- scanf("%d%d%d",&n,&low,&high);
- int zhengjian=,defen=,caifen=,level=;
- for(int i=;i<n;i++)
- {
- scanf("%d%d%d",&zhengjian,&defen,&caifen);
- if(defen>=low && caifen>=low)
- {
- //level
- if(defen>=high)
- {
- if(caifen>=high)
- level=;
- else
- level=;
- }
- else if(defen>=caifen)
- level=;
- else
- level=;
- //level
- student[level][num[level]][]= zhengjian;
- student[level][num[level]][]= defen;
- student[level][num[level]][]= caifen;
- num[level]++;
- }//if(defen>=low && caifen>=low)
- }
- printf("%d",num[]+num[]+num[]+num[]);
- int jiaohuan=,zongfen=,notfirst=;
- for(int k=;k<;k++)
- QS(student[k],,num[k]-);
- for(int k=;k<;k++)
- for(int i=;i<num[k];i++)
- printf("\n%08d %d %d",student[k][i][],student[k][i][],student[k][i][]);
- return ;
- }
PAT (Basic Level) Practise (中文)- 1015. 德才论 (25)的更多相关文章
- PAT (Basic Level) Practise (中文)-1039. 到底买不买(20)
PAT (Basic Level) Practise (中文)-1039. 到底买不买(20) http://www.patest.cn/contests/pat-b-practise/1039 小红 ...
- PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)
PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20) http://www.patest.cn/contests/pat-b-practise/1 ...
- PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20)
PAT (Basic Level) Practise (中文)- 1024. 科学计数法 (20) http://www.patest.cn/contests/pat-b-practise/1024 ...
- PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
PAT (Basic Level) Practise (中文)-1025. 反转链表 (25) http://www.patest.cn/contests/pat-b-practise/1025 ...
- PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15)
PAT (Basic Level) Practise (中文)- 1026. 程序运行时间(15) http://www.patest.cn/contests/pat-b-practise/10 ...
- PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20)
PAT (Basic Level) Practise (中文)-1027. 打印沙漏(20) http://www.patest.cn/contests/pat-b-practise/1027 本题 ...
- PAT (Basic Level) Practise (中文)-1028. 人口普查(20)
PAT (Basic Level) Practise (中文)-1028. 人口普查(20) http://www.patest.cn/contests/pat-b-practise/1028 某 ...
- PAT (Basic Level) Practise (中文)-1029. 旧键盘(20)
PAT (Basic Level) Practise (中文)-1029. 旧键盘(20) http://www.patest.cn/contests/pat-b-practise/1029 旧键盘上 ...
- PAT (Basic Level) Practise (中文)-1030. 完美数列(25)
PAT (Basic Level) Practise (中文)-1030. 完美数列(25) http://www.patest.cn/contests/pat-b-practise/1030 给 ...
- PAT (Basic Level) Practise (中文)-1031. 查验身份证(15)
PAT (Basic Level) Practise (中文)-1031. 查验身份证(15) http://www.patest.cn/contests/pat-b-practise/1031 一个 ...
随机推荐
- Animation Starter Pack中动画蓝图事件添加的位置
可以直接在动画状态机的详情页添加简单事件,跟在动画里添加的通知事件效果一致
- 洛谷P3959 宝藏(状压dp)
传送门 为什么感觉状压dp都好玄学……FlashHu大佬太强啦…… 设$f_{i,j}$表示当前选的点集为$i$,下一次要加入的点集为$j$时,新加入的点和原有的点之间的最小边权.具体的转移可以枚举$ ...
- Ubuntu下安装wine plsql
在电脑上安装了第二系统Ubuntu,但面临各种Linux不支持的开发软件也是束手无策.比如常用的Eclipse,PlSQl,Oracle,QQ等等,于是,上网查阅各种资料,最终的解决方案还是要依赖于w ...
- oracle 查看 job 日志
select * from user_scheduler_job_log select * from user_scheduler_job_run_details select * from use ...
- JS——三种嵌入页面的方式
一 行间事件 二 页面script标签嵌入 三 外部引入 <!DOCTYPE html> <html lang="en"> <head> < ...
- 《从0到1学习Flink》—— Flink 配置文件详解
前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧. 安装目录下主要有 flink-conf.yaml 配置.日志的配置文件.zk 配置.Fli ...
- 《从0到1学习Flink》—— 如何自定义 Data Sink ?
前言 前篇文章 <从0到1学习Flink>-- Data Sink 介绍 介绍了 Flink Data Sink,也介绍了 Flink 自带的 Sink,那么如何自定义自己的 Sink 呢 ...
- HTTP1.1中CHUNKED编码解析(转载)
HTTP1.1中CHUNKED编码解析 一般HTTP通信时,会使用Content-Length头信息性来通知用户代理(通常意义上是浏览器)服务器发送的文档内容长度,该头信息定义于HTTP1.0协议RF ...
- 关于rabbitmq的消息路由的同步问题
http://www.cnblogs.com/me-sa/archive/2012/11/12/rabbitmq_ram_or_disk_node.html我是看了上面的博客明白了一些原理的,我之前一 ...
- Mysql有什么办法批量去掉某个字段字符中的空格
Mysql有什么办法批量去掉某个字段字符中的空格?不仅是字符串前后的空格,还包含字符串中间的空格,答案是 replace,使用mysql自带的 replace 函数,另外还有个 trim 函数. ...