1055. The World's Richest

本文介绍了一种通过先排序再剪枝的方法来优化比赛编程中特定问题的解决方案,该方法能够有效减少超时情况,提高代码效率。文章详细展示了如何利用C++实现此优化过程,并附带完整的代码示例。

这一题开始写 case2超时 百度后 看别人说要剪植 剪完后发现case2错误  看了一下别人代码才发现别人是输入 排序后剪 而我是边输入边剪

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
#include<iterator>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
using namespace std;
typedef struct node{
char name[9];
int age;
int worth;
}node;
bool cmp1(node A, node B)
{
    if(A.worth<B.worth)
        return false;
    else if(A.worth==B.worth)
    {
        if(A.age>B.age)
            return false;
        else if(A.age==B.age)
        {
            if(strcmp(A.name,B.name)>0)
                return false;
        }
    }
    return true;

}
int main()
{
    int n,m,k;
    node a[100000];
    scanf("%d%d",&n,&k);
    int b[202]={0};
   int c[100000];
    int s=0;
  for(int i=0;i<n;i++)
    scanf("%s%d%d",a[i].name,&a[i].age,&a[i].worth);

  sort(a,a+n,cmp1);

  for(int i=0;i<n;i++)
    if(++b[a[i].age]<101)
    c[s++]=i;

  int amin,amax;
 for(int i=0;i<k;i++)
 {
     scanf("%d%d%d",&m,&amin,&amax);
       printf("Case #%d:\n",i+1);
     int index=0;
     for(int j=0;j<s;j++)
        if(a[c[j]].age>=amin&&a[c[j]].age<=amax&&index<m)
        {
            printf("%s %d %d\n",a[c[j]].name,a[c[j]].age,a[c[j]].worth);
            index++;
        }
            if(!index)
            printf("None\n");
 }

    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值