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

PAT甲级-1055 The World‘s Richest

题目

 

题目大意

输入给出富人的总数以及富人的姓名、年龄、财富,接下来的k行给出需要排序的个数,每个排序要求输出m个富人,并且限制了年龄段,[Amin, Amax]。要求输出所有的排序。如果满足年龄段的人数为0,就输出None。如果富人财富相同,年龄小的优先输出,如果年龄也相同,名字字母序小的优先输出。

思路

本来我的思路是用结构体存储完整个富人信息后,再用for循环遍历每个条件,筛选出符合年龄段的人存储到一个新数组中,再在这个新数组中排序,最后输出结果。但是测试点2运行超时,核心代码如下。

这个新数组v2在for循环中不断迭代,一直开新的空间,比较占内存,然后我又将v2放到for循环的外面,每次遍历的时候都用clear()将v2清空,但是还是超时。这里我没有想到的是,题目中的n值是很大的,10的6次方,但是要求输出的值只有m<=100个。(做题的过程中,把题中的m当成k了,然后把m弄成num了,这里没看好题)所以不能将n个全存数组后才输出,应该一边判断是否在年龄段中一边输出,当输出的数量达到要求后,再break见好就收。因此要在for循环之前就将全部的数组排序,然后在循环内遍历排序好的数组,找到符合年龄段的元素后输出。v2数组也就没有存在的必要了。另外,我把vector改成了int,速度应该能更快一点。

代码

#include <iostream>
#include <algorithm>
using namespace std;struct man{string name;int age;int money;
}v[100003];bool cmp(man x, man y){if (x.money == y.money){if (x.age == y.age){return x.name < y.name;}else{return x.age < y.age;}}else{return x.money > y.money;}
}int main(){int n, m;cin >> n >> m;for (int i = 0; i < n; i++){cin >> v[i].name >> v[i].age >> v[i].money;}sort(v, v + n, cmp);for (int i = 0; i < m; i++){int num, amin, amax;cin >> num >> amin >> amax;cout << "Case #" << i + 1 << ":" << endl;int count = 0;for (int j = 0; j < n; j++){if (v[j].age >= amin && v[j].age <= amax){cout << v[j].name << " " << v[j].age << " " << v[j].money << endl;count++;}if (count == num){break;}}if (count == 0){cout << "None" << endl;}}return 0;
}


http://www.mrgr.cn/news/28906.html

相关文章:

  • 关于STM32项目面试题01:电源篇
  • Vue2知识点
  • C++对象拷贝时的优化编译
  • LLamaindex基本使用
  • 06-1_间隙锁和临键锁的锁定范围
  • JVM 调优篇7 调优案例4- 线程溢出
  • COMDEL电源CPS500AS RF13.56MHZ RF Generator手侧
  • 好代码网同款wordpress主题,完全开源无加密可二开
  • 优惠充值话费api对接如何选择对接平台?
  • 最短路径算法
  • JavaScript考核详解
  • 淘宝npm镜像源更新后,如何正常使用npm命令
  • 使用C++程序编写5 个浮点数,求平均值后输出
  • STL相关简介
  • 削峰+限流:秒杀场景下的高并发写请求解决方案
  • Vscode运行Python无法导入自己编写的包的解决方法
  • 【数据结构初阶】顺序结构二叉树(堆)接口实现超详解
  • Flet全平台开发:软件开发界勇士为Python语言补短板的一次极具挑战性的尝试、冲刺和华丽亮相
  • AWS认证SAA-C03每日一题
  • python中Web开发框架的使用