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位整数组成 ...
随机推荐
- ask confirm shell
#/bin/bash BASEDIR=$(cd $() && pwd) cd $BASEDIR>/dev/null usage="Usage: $0 -o/--org ...
- go常量的定义和枚举类型
const a,b int = 1,2 const a,b = 1,2 const ( a = "hello" b,c =3,4 ) 常量数值可作为各种类型使用 枚举类型的 ...
- Selenium常用API的使用java语言之18-浏览器cookie操作
有时候我们需要验证浏览器中Cookie是否正确, 因为基于真实Cookie的测试是无法通过白盒测试和集成测试进行的.WebDriver提供了操作Cookie的相关方法可以读取. 添加和删除Cookie ...
- BZOJ 3636 教义问答手册 (分治)
题意 一个整数数列,多次询问某段区间[li,ri][l_i,r_i][li,ri]内,选出若干个长度为LLL且不相交的连续段使选出来的数和最大. 分析 首先想朴素的区间DPDPDP 设f[i][j ...
- Second Max of Array
Find the second max number in a given array. Example Given [1, 3, 2, 4], return 3. Given [1, 2], ret ...
- 利用 make_plan 规划起点到目标点的路径,并且发布出去
geometry_msgs::PoseStamped Start; Start.header.seq = ; Start.header.stamp = Time(); Start.header.fra ...
- Linux下java环境变量配置
安装步骤 1.查看当前Linux系统是否安装java rpm -qa | grep java 2.卸载系统中已经存在的openJDK rpm -e --nodeps java--openjdk-1.7 ...
- expect 实例
[root@runstone ssh_lianxi]# cat expect.sh #!/usr/bin/env expect } { #判断命令行参数的个数 send_user "usag ...
- NOIP2014提高组 题解报告
D1 T1 无线网路发射器选址 题目大意:找一个矩形,使其覆盖的目标点最大. 题目过水,直接暴力搞过去,代码就不贴了. 但我TM居然有个地方SB了,调了半天才发现输入有问题: scanf(" ...
- ICEM-带肋圆柱
原视频下载地址:https://yunpan.cn/cqUj6H9un37F2 访问密码 91af