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 分)(简单,结构体排序)的更多相关文章

  1. PAT 甲级 1012 The Best Rank (25 分)(结构体排序)

    题意: 为了评估我们第一年的CS专业学生的表现,我们只考虑他们的三个课程的成绩:C - C编程语言,M - 数学(微积分或线性代数)和E - 英语.同时,我们鼓励学生强调自己的最优秀队伍 - 也就是说 ...

  2. 【PAT甲级】1016 Phone Bills (25 分)(结构体排序)

    题意: 输入24个正整数代表从0到23每个小时通话一分钟花费的美分.输入一个正整数N(<=1000),然后输入N组字符串,每个字符串包含客户的名字和通话的时刻以及打出或者挂断的状态. 按照字典序 ...

  3. 【PAT甲级】1026 Table Tennis (30 分)(结构体排序,trick较多)

    题意: 输入一个正整数N(<=10000),表示客户(对)的大小,接着输入N行数据,每行包括一对顾客到场的时间,想要玩的时间,以及是否是VIP客户.接下来输入两个正整数K,M(K<=100 ...

  4. 1062 Talent and Virtue (25分)(水)

    About 900 years ago, a Chinese philosopher Sima Guang wrote a history book in which he talked about ...

  5. PAT 甲级 1070 Mooncake (25 分)(结构体排序,贪心,简单)

    1070 Mooncake (25 分)   Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autum ...

  6. PAT 甲级 1016 Phone Bills (25 分) (结构体排序,模拟题,巧妙算时间,坑点太多,debug了好久)

    1016 Phone Bills (25 分)   A long-distance telephone company charges its customers by the following r ...

  7. 【PAT甲级】1062 Talent and Virtue (25 分)

    题意: 输入三个正整数N,L,H(N<=1E5,L>=60,H<100,H>L),分别代表人数,及格线和高水平线.接着输入N行数据,每行包括一个人的ID,道德数值和才能数值.一 ...

  8. PAT 甲级1025 PAT Ranking (25 分)(结构体排序,第一次超时了,一次sort即可小技巧优化)

    题意: 给定一次PAT测试的成绩,要求输出考生的编号,总排名,考场编号以及考场排名. 分析: 题意很简单嘛,一开始上来就,一组组输入,一组组排序并记录组内排名,然后再来个总排序并算总排名,结果发现最后 ...

  9. 【PAT甲级】1025 PAT Ranking (25 分)(结构体排序,MAP<string,int>映射)

    题意: 输入一个正整数N(N<=100),表示接下来有N组数据.每组数据先输入一个正整数M(M<=300),表示有300名考生,接下来M行每行输入一个考生的ID和分数,ID由13位整数组成 ...

随机推荐

  1. P2P system: Chord

    DHT= Distributed Hash Table store the objects(files) at nodes (hosts, machines) in a cluster. The cl ...

  2. 2018 Arab Collegiate Programming Contest (ACPC 2018) G. Greatest Chicken Dish (线段树+GCD)

    题目链接:https://codeforces.com/gym/101991/problem/G 题意:给出 n 个数,q 次询问区间[ li,ri ]之间有多少个 GCD = di 的连续子区间. ...

  3. SIGAI机器学习第四集 基本概念

    大纲: 算法分类有监督学习与无监督学习分类问题与回归问题生成模型与判别模型强化学习评价指标准确率与回归误差ROC曲线交叉验证模型选择过拟合与欠拟合偏差与方差正则化 半监督学习归类到有监督学习中去. 有 ...

  4. HTML 文字垂直剧中

    HTML 有个使文字垂直剧中的代码   line-height:     line-height:使用时  总高多少 后边就输入多少PX 剧中前展示 剧中后展示

  5. am335x system upgrade rootfs custom service using systemd script(十七)

    1      Scope of Document systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序.功能包括:支持并行化任务: ...

  6. jQuery相关方法5----表单相关

    一.value属性在表单的相关操作-----val()方法 <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js ...

  7. 在其他博客里看到的比较好的map用法,进行储存啦啦~ x

    1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...

  8. (4)打鸡儿教你Vue.js

    模板语法: <div id="app"> <p>{{ message }}</p> </div> html 使用 v-html 指令 ...

  9. 【原创】go语言学习(二十)并发编程

    目录 并发和并行 Goroutine初探 Goroutine实战 Goroutine原理浅析 Channel介绍 Waitgroup介绍 Workerpool的实现 并发和并行 1.概念A. 并发:同 ...

  10. 10月清北学堂培训 Day 7

    今天是黄致焕老师的讲授~ 历年真题选讲 NOIP 2012 开车旅行 小 A 和小 B 决定外出旅行,他们将想去的城市从 1 到 n 编号,且编号较小的城市在编号较大的城市的西边.记城市 i 的海拔高 ...