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

【PAT甲级真题】- Talent and Virtue (25)

题目来源

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.

输入描述:

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 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.

输出描述:

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.

输入例子:

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

输出例子:

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

思路简介

题目看懂了其实就是重载个排序函数而已
题目要求分四个类型来排序就开四个数组就行了

遇到的问题

  1. 忘记输出参与排名的总人数wa了一次

代码

/** * https://www.nowcoder.com/pat/5/problem/4029 * 排序 */#include<bits/stdc++.h>usingnamespacestd;structPerson{intid,talent,virtue;Person():id(0),talent(0),virtue(0){}Person(intid,inttalent,intvirtue):id(id),talent(talent),virtue(virtue){};booloperator<(Person&a){//this<aif(this->talent+this->virtue==a.talent+a.virtue){if(this->virtue==a.virtue){returnthis->id<a.id;}returnthis->virtue>a.virtue;}returnthis->talent+this->virtue>a.talent+a.virtue;}};ostream&operator<<(ostream&out,Person a){out<<a.id<<' '<<a.virtue<<' '<<a.talent<<'\n';returnout;}voidsolve(){intn,l,h;cin>>n>>l>>h;vector<Person>sages,nobleman,foolman,smallman;for(inti=0;i<n;++i){intid,t,v;cin>>id>>v>>t;if(t<l||v<l)continue;if(t>=h&&v>=h)sages.emplace_back(id,t,v);elseif(v>=h)nobleman.emplace_back(id,t,v);elseif(v>=t)foolman.emplace_back(id,t,v);elsesmallman.emplace_back(id,t,v);}sort(sages.begin(),sages.end());sort(nobleman.begin(),nobleman.end());sort(foolman.begin(),foolman.end());sort(smallman.begin(),smallman.end());cout<<sages.size()+nobleman.size()+foolman.size()+smallman.size()<<'\n';intlen=sages.size();for(inti=0;i<len;++i)cout<<sages[i];len=nobleman.size();for(inti=0;i<len;++i)cout<<nobleman[i];len=foolman.size();for(inti=0;i<len;++i)cout<<foolman[i];len=smallman.size();for(inti=0;i<len;++i)cout<<smallman[i];}intmain(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);//fstream in("in.txt",ios::in);cin.rdbuf(in.rdbuf());intT=1;//cin>>T;while(T--){solve();}return0;}
http://www.jsqmd.com/news/594408/

相关文章:

  • 半导体盛会哪家好?2026年度主流芯坛半导体盛会 - 品牌2026
  • 2026年计算机科学论文降AI工具推荐:代码注释和算法描述部分如何降
  • 半导体行业展会推荐:汇聚高规格半导体展会搭建产业交流合作平台 - 品牌2026
  • 5分钟充电500公里?更像为炒作噱头,实现并不容易!大城市建设可能被消防限制!
  • 代码写不动了?传统程序员不转型AI工程化提示词专家,将被AI助手彻底平替
  • 手把手拆解ST FOC库:Circle Limitation的查表法实现与优化技巧
  • 人到中年,生日收到这三条短信,我读了很久
  • 模型轻量化实践:在4GB内存设备运行OpenClaw+Phi-3-vision
  • 半导体全产业链展会哪家好?2026 年半导体优选行业盛会推荐 - 品牌2026
  • 省考面试必看!初心教育不玩虚的,真实口碑+实战演练,上岸更稳
  • 西交提出 OdysseyArena:让智能体真正“学会探索”的长程归纳推理基准
  • 12 3456(2)
  • 内存市场为何迅速崩盘?实在是个人市场变化太快了,美韩芯片图谋破裂了
  • 实测对比:ChatGPT、Gemini、Grok、Claude 在四个开发任务中的表现差异
  • 白嫖DeepSeek、GLM、MiniMax、Kimi等大模型,每天 1亿 Token 免费领!
  • JavaScript 解构赋值
  • STM32 定时器与 PWM 输出:电机调速、LED 呼吸灯实战
  • 为什么80%AI率降完后还有残留?根本原因在这
  • OpenClaw家庭作业助手:Qwen3-14B解析数学题并分步讲解
  • MCP服务赋能供应链、销售与财务高效运转
  • 高呼电车渗透率创新高?忘记2025年渗透率近六成的历史纪录了!
  • 2026年必看:5大高性价比室内高尔夫模拟器品牌推荐
  • Jupyter notebook学习容易忘的点
  • OpenClaw语音交互方案:千问3.5-27B对接Whisper实现听写
  • LLMKG+ 知识图谱改进实战指南(非常详细),大模型提升质量与覆盖从入门到精通,收藏这一篇就够了!
  • 从阻抗失配到完美传输:3个运放跟随器在音频电路中的经典应用场景
  • ‌智慧校园平台选型怎么选?这份避坑指南请收好‌
  • 53.最大子数组和
  • Laravel 6.x 核心特性深度解析
  • 探索MATLAB/Simulink下风光储电解制氢与氢燃料电池系统仿真模型