PAT 1055

题目 : The World’s Richest

分值 : 25
难度 : 中等题
思路 : 结构体排序
坑点 : 想按照 财富-年龄-名字 排序 ,然后对数据筛选一次,筛掉每个年龄段100名以后的数据,然后
       针对每个请求,扫一遍打印出来
评语 : 一定要先排序 才能筛选数据 ,只有这样才能保证被筛选掉的是 排在100名以后的数据

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <set>
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
vector<int > cnt ;
typedef struct Node
{
char name[10] ;
int age ;
int welth ;
}Nodes ;
vector< Node > db;
vector< Node >ans ;
bool cmp(Node a, Node b)
{
return a.welth == b.welth ? (a.age == b.age ? strcmp(a.name,b.name)<0 : a.age < b.age) : a.welth > b.welth;
}
int main()
{
int N , K,M , Min, Max ,age ,welth;
cin >>N>>K ;
cnt.resize(201);
db.resize(N) ;
for(int i = 0 ; i< N ;i++)
scanf("%s %d %d" ,db[i].name , &db[i].age,&db[i].welth);
sort(db.begin() , db.end() ,cmp) ;
for(int i = 0 ; i< N ; i++)
{
cnt[ db[i].age ]++;
if(cnt[ db[i].age ] < 102)
ans.push_back(db[i]) ;
}
for(int i = 0 ;i< K ; i++)
{
scanf("%d%d%d",&M,&Min,&Max);
printf("Case #%d:\n",i+1);
int flag =1 ;
for(int j= 0 ; j<ans.size() ;j++)
{
if(ans[j].age >=Min && ans[j].age <=Max && M-->0 && flag++)
printf("%s %d %d\n",ans[j].name , ans[j].age,ans[j].welth);
}
if(flag==1)
printf("None\n");
}
}