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位整数组成 ...
随机推荐
- JDBC课程1-实现Driver接口连接mysql数据库、通用的数据库连接方法(使用文件jdbc.properties)
package day_18; import jdk.internal.util.xml.impl.Input; import org.junit.Test; import java.io.Input ...
- HDU-1237- 简单计算器--栈的基本应用
简单计算器 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不 ...
- vue2 自定义键盘事件
- django设置时区与语言
django的目录下,django/conf/locale,这个目录下,看有什么语言包, zh_Hans代表中文简体,zh_Hant代表中文繁体,设置即可. TIME_ZONE设置为:Asia/Sha ...
- python - scrapy 爬虫框架 ( redis去重 )
1. 使用内置,并加以修改 ( 自定义 redis 存储的 keys ) settings 配置 # ############### scrapy redis连接 ################# ...
- CF436E Cardboard Box(贪心)
题意 有nnn个关卡,第iii关可以花费aia_iai的代价打一颗星,bib_ibi的代价打两颗星.保证1≤ai<bi≤1091\le a_i<b_i\le10^91≤ai<b ...
- KMP解决字符串最小循环节相关问题
经典问题 : 给出一个由某个循环节构成的字符串,要你找出最小的循环节,例如 abababab 最小循环节当是 ab ,而类似 abab 也可以成为它的循环节,但并非最短. 分析 : 对于上述问题有两个 ...
- dashucoding记录2019.6.8
WordPress网站 网址: https://cn.wordpress.org/ 阿里云市场 https://market.aliyun.com/products/53616009?spm=a2c4 ...
- python 元组 【基本使用功能】
元组是括号,列表是方括号,都可以通用的有好多,比如判断一个元素是否存在可以直接用 in ,复制或者合并可以直接用乘或者加. 下面是在菜鸟教程截得的: 示例: #!/usr/bin/python # - ...
- ACwing_789. 数的范围
算法竞赛进阶指南上说据说只有10%的程序员能写对二分,而我这种蒟蒻..所以虽然这是一道非常基础的二分,但我觉得对我来说还是有必要写一篇博客来总结一下,也在写的过程中检验一下自己. 一开始看到这道题我还 ...