思路:
1、根据题目要求进行排序,按照财富降序排序—财富相同按年龄升序—年龄相同按名字字典序升序
注意:
最好先对所有人进行排序,再根据题目要求找出符合年龄段的前num个人,否则可能会超时
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
struct Person //富豪结构体
{
char name[30];
int age,worth;
}a[100005],b[100005];
bool cmp(Person a,Person b)
{
if(a.worth != b.worth)
return a.worth > b.worth;
if(a.age != b.age)
return a.age < b.age;
int s = strcmp(a.name,b.name);
return s < 0;
}
int main()
{
int n,k,num,x,y;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%s%d%d",a[i].name,&a[i].age,&a[i].worth);
sort(a,a+n,cmp); //先对所有富豪根据题目要求进行排序
for(int i=0;i<k;i++)
{
scanf("%d%d%d",&num,&x,&y);
int t=0;
for(int j=0;j<n;j++)
{
if(a[j].age >= x && a[j].age <= y) //找出符合年龄区间的富豪,存放在结构体数组中
{
b[t] = a[j];
t++;
}
if(t == num) //只要找出前num个即可
break;
}
if(t == 0)
printf("Case #%d:\nNone\n",i+1);
else
{
printf("Case #%d:\n",i+1);
for(int j=0;j<t;j++)
printf("%s %d %d\n",b[j].name,b[j].age,b[j].worth);
}
}
return 0;
}