PAT 甲级 1062 Talent and Virtue (25 分)(简单,结构体排序)
About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about people's talent and virtue. According to his theory, a man being outstanding in both talent and virtue must be a "sage(圣人)"; being less excellent but with one's virtue outweighs talent can be called a "nobleman(君子)"; being good in neither is a "fool man(愚人)"; yet a fool man is better than a "small man(小人)" who prefers talent than virtue.
Now given the grades of talent and virtue of a group of people, you are supposed to rank them according to Sima Guang's theory.
Input Specification:
Each input file contains one test case. Each case first gives 3 positive integers in a line: N (≤), the total number of people to be ranked; L (≥), the lower bound of the qualified grades -- that is, only the ones whose grades of talent and virtue are both not below this line will be ranked; and H (<), the higher line of qualification -- that is, those with both grades not below this line are considered as the "sages", and will be ranked in non-increasing order according to their total grades. Those with talent grades below H but virtue grades not are cosidered as the "noblemen", and are also ranked in non-increasing order according to their total grades, but they are listed after the "sages". Those with both grades below H, but with virtue not lower than talent are considered as the "fool men". They are ranked in the same way but after the "noblemen". The rest of people whose grades both pass the L line are ranked after the "fool men".
Then N lines follow, each gives the information of a person in the format:
ID_Number Virtue_Grade Talent_Grade
where ID_Number
is an 8-digit number, and both grades are integers in [0, 100]. All the numbers are separated by a space.
Output Specification:
The first line of output must give M (≤), the total number of people that are actually ranked. Then M lines follow, each gives the information of a person in the same format as the input, according to the ranking rules. If there is a tie of the total grade, they must be ranked with respect to their virtue grades in non-increasing order. If there is still a tie, then output in increasing order of their ID's.
Sample Input:
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
Sample Output:
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
题意:
ID_Number Virtue_Grade Talent_Grade
1.只有两个分数都大于等于L才有资格排序
2.圣人就是两个分数都大于等于H....按照总分递减
3.君子就是才能低于H但是品德高于H...按照总分递减排序
4.愚人就是品德和才能低于H但是品德高于才能的
5.其余的是小人
6.排序是按品德和才能总分递减,总分相同按照品德分递减,品德分相同按照id递减
————————————————
版权声明:本文为CSDN博主「galesaur_wcy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/galesaur_wcy/article/details/81563516
AC代码:
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int N,L,H;
int sa=,no=,fn=,sn=;
struct node{
string id;
int vir;
int tal;
};
node sage[];
node noble[];
node fm[];
node sm[];
bool cmp(node x,node y){
if(x.vir+x.tal!=y.vir+y.tal) return x.vir+x.tal>y.vir+y.tal;
else if(x.vir!=y.vir) return x.vir>y.vir;
else return x.id<y.id;
}
int main(){
cin>>N>>L>>H;
for(int i=;i<=N;i++){
string x;
int y,z;
cin>>x>>y>>z;
if(y<L||z<L) continue;
if(y>=H&&z>=H){
sage[++sa].id=x;
sage[sa].vir=y;
sage[sa].tal=z;
continue;
}
if(y>=H&&z<H){
noble[++no].id=x;
noble[no].vir=y;
noble[no].tal=z;
continue;
}
if(y<H&&z<H&&y>=z){
fm[++fn].id=x;
fm[fn].vir=y;
fm[fn].tal=z;
continue;
}
sm[++sn].id=x;
sm[sn].vir=y;
sm[sn].tal=z;
}
sort(sage+,sage++sa,cmp);
sort(noble+,noble++no,cmp);
sort(fm+,fm++fn,cmp);
sort(sm+,sm++sn,cmp);
cout<<sa+no+fn+sn<<endl;
for(int i=;i<=sa;i++) cout<<sage[i].id<<" "<<sage[i].vir<<" "<<sage[i].tal<<endl;
for(int i=;i<=no;i++) cout<<noble[i].id<<" "<<noble[i].vir<<" "<<noble[i].tal<<endl;
for(int i=;i<=fn;i++) cout<<fm[i].id<<" "<<fm[i].vir<<" "<<fm[i].tal<<endl;
for(int i=;i<=sn;i++) cout<<sm[i].id<<" "<<sm[i].vir<<" "<<sm[i].tal<<endl;
return ;
}
PAT 甲级 1062 Talent and Virtue (25 分)(简单,结构体排序)的更多相关文章
- PAT 甲级 1012 The Best Rank (25 分)(结构体排序)
题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说 ...
- 【PAT甲级】1016 Phone Bills (25 分)(结构体排序)
题意: 输入24个正整数代表从0到23每个小时通话一分钟花费的美分.输入一个正整数N(<=1000),然后输入N组字符串,每个字符串包含客户的名字和通话的时刻以及打出或者挂断的状态. 按照字典序 ...
- 【PAT甲级】1026 Table Tennis (30 分)(结构体排序,trick较多)
题意: 输入一个正整数N(<=10000),表示客户(对)的大小,接着输入N行数据,每行包括一对顾客到场的时间,想要玩的时间,以及是否是VIP客户.接下来输入两个正整数K,M(K<=100 ...
- 1062 Talent and Virtue (25分)(水)
About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...
- PAT 甲级 1070 Mooncake (25 分)(结构体排序,贪心,简单)
1070 Mooncake (25 分) Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autum ...
- PAT 甲级 1016 Phone Bills (25 分) (结构体排序,模拟题,巧妙算时间,坑点太多,debug了好久)
1016 Phone Bills (25 分) A long-distance telephone company charges its customers by the following r ...
- 【PAT甲级】1062 Talent and Virtue (25 分)
题意: 输入三个正整数N,L,H(N<=1E5,L>=60,H<100,H>L),分别代表人数,及格线和高水平线.接着输入N行数据,每行包括一个人的ID,道德数值和才能数值.一 ...
- PAT 甲级1025 PAT Ranking (25 分)(结构体排序,第一次超时了,一次sort即可小技巧优化)
题意: 给定一次PAT测试的成绩,要求输出考生的编号,总排名,考场编号以及考场排名. 分析: 题意很简单嘛,一开始上来就,一组组输入,一组组排序并记录组内排名,然后再来个总排序并算总排名,结果发现最后 ...
- 【PAT甲级】1025 PAT Ranking (25 分)(结构体排序,MAP<string,int>映射)
题意: 输入一个正整数N(N<=100),表示接下来有N组数据.每组数据先输入一个正整数M(M<=300),表示有300名考生,接下来M行每行输入一个考生的ID和分数,ID由13位整数组成 ...
随机推荐
- Java8新特性--日期和时间API
如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...
- vb开发最全教程
https://www.xin3721.com/eschool/VisualBasicenet/
- IE下iframe不能正常加载,显示空白
下午帮忙看了一个web问题,index.html中嵌入<iframe>来加载同文件目录下的一个页面,在多个浏览器下测试,发现IE浏览器中会出现问题,<iframe>不能正常加载 ...
- 安装部署mongodb
准备 groupadd mongodb useradd -g mongodb mongodb echo password |passwd --stdin mongodb mkdir -pv /data ...
- php面向对象之静态方法使用
什么是静态方法? 不是所有的变量和方法都要通过创建对象来调用.可以通过给变量和方法加上static关键字来直接调用.无锡大理石测量平台 调用静态成员的语法格式为: 关键字::静态成员 关键字可以是: ...
- 070_Shell 脚本对信号的处理,执行脚本后,按键盘 Ctrl+C 无法终止的脚本
#!/bin/bash#使用 trap 命令可以拦截用户通过键盘或 kill 命令发送过来的信号#使用 kill -l 可以查看 Linux 系统中所有的信号列表,其中 2 代表 Ctrl+C#tra ...
- AtCoder Grand Contest 002题解
传送门 \(A\) 咕咕 int main(){ cin>>a>>b; if(b<0)puts(((b-a+1)&1)?"Negative": ...
- 打造简单OS-总目录
1-汇编写入引导区,虚拟机启动步骤 (了解即可) 2-开机BIOS初始化与MBR操作系统引导详解 (了解即可) 3-MBR引导区转移加载简单程序(突破512限制)(了解即可) 4-loader硬盘加载 ...
- chrome-添加JSON-handler插件
1.访问http://jsonhandle.sinaapp.com/下载 2.谷歌访问 chrome://extensions/ 然后找到你下载的JSON-handle_0.5.2.crx文件,直 ...
- docker install and minikube install
1.选择国内的云服务商,这里选择阿里云为例 curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/ ...