当前位置: 首页 > news >正文

1062 Talent and Virtue

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 (≤105), the total number of people to be ranked; L (≥60), 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 (<100), 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 considered 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 (≤N), 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 ,德行分数 virtue 和才华分数 talent 。

现在需要我们对给定的人进行排名,排名规则如下:

才华和德行均不低于 H 的是圣人,圣人们按德才总分不升序排序。
才华低于 H ,德行不低于 H 的是君子,君子们按德才总分不升序排序,他们都低于圣人。
才华和德行均低于 H ,但是德行不低于才华的是愚人,愚人们按德才总分不升序排序,他们都低于君子。
能够参与排名的,不属于以上三类人的均是小人,小人们按德才总分不升序排序,他们都低于愚人。

分析:总结一下排名规则,每种人均按照总分从高到低排名,总分相同则看德行分数从高到低,德行相同则看编号从小到大。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define ll long long
#define INF 0x3f3f3f3f
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
using namespace std;typedef struct people
{int id,vg,tg,sum;
}people;bool cmp(people a,people b)
{if(a.sum!=b.sum)return a.sum>b.sum;if(a.vg!=b.vg)return a.vg>b.vg;return a.id<b.id;
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);//freopen("in.txt","w",stdout);clock_t start=clock();#endif //testint n,l,h,cnt=0;scanf("%d%d%d",&n,&l,&h);vector<people>sage,nobleman,foolman,smallman;people peo[n+5]={0};for(int i=0;i<n;++i){people temp;scanf("%d%d%d",&temp.id,&temp.vg,&temp.tg);temp.sum=temp.vg+temp.tg;if(temp.vg>=l&&temp.tg>=l){cnt++;if(temp.vg>=h&&temp.tg>=h)sage.push_back(temp);else if(temp.vg>=h&&temp.vg>=temp.tg)nobleman.push_back(temp);else if(temp.vg>=temp.tg)foolman.push_back(temp);else smallman.push_back(temp);}}printf("%d\n",cnt);sort(sage.begin(),sage.end(),cmp);sort(nobleman.begin(),nobleman.end(),cmp);sort(foolman.begin(),foolman.end(),cmp);sort(smallman.begin(),smallman.end(),cmp);for(auto it=sage.begin();it!=sage.end();++it)printf("%d %d %d\n",(*it).id,(*it).vg,(*it).tg);for(auto it=nobleman.begin();it!=nobleman.end();++it)printf("%d %d %d\n",(*it).id,(*it).vg,(*it).tg);for(auto it=foolman.begin();it!=foolman.end();++it)printf("%d %d %d\n",(*it).id,(*it).vg,(*it).tg);for(auto it=smallman.begin();it!=smallman.end();++it)printf("%d %d %d\n",(*it).id,(*it).vg,(*it).tg);#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s为单位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms为单位#endif //testreturn 0;
}

 

http://www.lryc.cn/news/493650.html

相关文章:

  • C++《二叉搜索树》
  • 机器学习-神经网络(BP神经网络前向和反向传播推导)
  • 基于智能物联网关的车辆超重AI检测应用
  • 记录pbootcms提示:登录失败:表单提交校验失败,请刷新后重试的解决办法
  • 【JavaScript】同步异步详解
  • vue 使用el-button 如何实现多个button 单选
  • HarmonyOS-初级(二)
  • Unity开启外部EXE程序
  • CTF之密码学(埃特巴什码 )
  • 深入解析 PyTorch 的 torch.load() 函数:用法、参数与实际应用示例
  • ros2键盘实现车辆: 简单的油门_刹车_挡位_前后左右移动控制
  • ubuntu安装chrome无法打开问题
  • CTF-RE 从0到N:Chacha20逆向实战 2024 强网杯青少年专项赛 EnterGame WP (END)
  • vue3 ajax获取json数组排序举例
  • web安全之信息收集
  • 报错:java: 无法访问org.springframework.boot.SpringApplication
  • 线上+线下≠新零售,6大互通诠释新零售的核心要点-亿发
  • GitHub Copilot革命性更新:整合顶尖AI模型,如何重塑开发体验?
  • AWS账户是否支持区域划分?
  • Easy Excel 通过【自定义批注拦截器】实现导出的【批注】功能
  • 整数对最小和(Java Python JS C++ C )
  • MySQL 启动失败问题分析与解决方案:`mysqld.service failed to run ‘start-pre‘ task`
  • 谷歌浏览器Chrome打开百度很慢,其他网页正常的解决办法,试了很多,找到了适合的
  • 深度学习Pytorch中的模型保存与加载方法
  • 小红书矩阵运营:怎么通过多个账号来提升品牌曝光?
  • Llama-2-7b:vocab size:32000;embeddings:4096;hidden_layers是什么意思
  • 【moveit!】ROS学习笔记
  • 【Leetcode 每日一题 - 补卡】3259. 超级饮料的最大强化能量
  • 【人工智能】使用Python实现序列到序列(Seq2Seq)模型进行机器翻译
  • 量化交易系统开发-实时行情自动化交易-4.4.1.做市策略实现