首页 > 其他分享 >PAT甲级-1055 The World‘s Richest

PAT甲级-1055 The World‘s Richest

时间:2024-09-17 20:19:36浏览次数:12  
标签:输出 PAT 1055 int money age World 富人 name

题目

 

题目大意

输入给出富人的总数以及富人的姓名、年龄、财富,接下来的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;
}

标签:输出,PAT,1055,int,money,age,World,富人,name
From: https://blog.csdn.net/weixin_74092648/article/details/142318329

相关文章

  • 【PAT_Python解】1014 福尔摩斯的约会
    原题链接:PTA|程序设计类实验辅助教学平台Tips:以下Python代码仅个人理解,非最优算法,仅供参考!ls=[]#装输入数据,你也可以S1,S2,S3,S4=input(),···D,H,M='','',''dict={'A':'MON','B':'TUE','C':'WED','D�......
  • 嵌入式单片机程序运行机制,从helloworld说起
    1开篇学习任何一门编程语言,都会从helloworld开始。对于一门从未接触过的语言,在短时间内我们都能用这种语言写出它的helloworld。然而,对于helloworld这个简单程序的内部运行机制,相信还有很多人都不是很清楚。helloworld这些信息是如何通显示器过显示的?cpu执行的代码和......
  • xpath 选择器的语法
    选择节点: //tag:选择文档中所有tag元素。 /tag:选择根节点下的tag元素。 //tag[@attribute='value']:选择具有特定属性值的tag元素。 选择子节点: tag1/tag2:选择tag1下的所有tag2子节点。 tag1/*:选择tag1下的所有子元素。 选择父节点: ..:选择......
  • WPF JumpList JumpList ApplicationPath IconResourcePath
    //App.xaml<Applicationx:Class="WpfApp369.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local=&......
  • WPF DataGrid ContextMenu CommandParameter Relative x:Type ContextMenu ,Path=Plac
    //xaml<DataGrid.ContextMenu><ContextMenu><MenuItemHeader="SerializeBinary"Command="{BindingBinSerializeCmd}"CommandParameter="{BindingRelativeSource={Relativ......
  • 原型模式(Prototype Pattern)
    原型模式是一种创建型设计模式,使用克隆方法来复制现有对象,从而避免重复的初始化操作,特别适用于创建重复对象的场景。适用场景:当一个系统需要创建新对象的对象系统中,可通过克隆一个原型并对其进行改造。当对象的创建成本比较大(如复杂的初始化)时。示例代码:abstractclassSha......
  • C# 设计模式:适配器模式(Adapter Pattern)
    摘要适配器模式是一种结构型设计模式,它允许不兼容的接口之间能够相互合作。这种模式涉及到一个单独的类,它负责加入独立的或不兼容的接口功能。简单来说,适配器模式就是一个中间件,它使得原本由于接口不兼容而不能一起工作的类可以一起工作。正文应用场景适配器模式通常应用于以下情况......
  • 深入理解FastAPI中的root_path:提升API部署灵活性的关键配置
    在Web开发领域,FastAPI因其高性能、易于使用和类型提示功能而备受开发者喜爱。然而,当涉及到在生产环境中部署FastAPI应用程序时,我们常常需要面对一些挑战,比如如何正确处理代理服务器添加的路径前缀。这时,root_path配置就变得至关重要。本文将深入探讨FastAPI中的root_path,并......
  • OpenCore Legacy Patcher 2.0.0 发布,83 款不受支持的 Mac 机型将能运行最新的 macOS S
    在不受支持的Mac上安装macOSSequoia(OpenCoreLegacyPatcherv2.0.0)InstallmacOSonunsupportedMacs请访问原文链接:https://sysin.org/blog/install-macos-on-unsupported-mac/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org随着OpenCoreLegacyPatcher......
  • 设计模式-解释器模式-Interpreter Pattern
    系列文章目录总目录链接文章目录系列文章目录总目录链接设计模式-解释器模式-InterpreterPatternOverview1.解释器模式(InterpreterPattern)1.1.组成要素1.2.适用场景1.3.优点1.4.缺点1.5.示例代码(C++)2.解释器模式优缺点2.1.优点2.2.缺点3.解释器模式在实际开发中......