【PAT甲级】1055 The World's Richest (25 分)

题意:

输入两个正整数N和K(N<=1e5,K<=1000),接着输入N行,每行包括一位老板的名字,年龄和财富。K次询问,每次输入三个正整数M,L,R(M<=100,L,R<=200),输出至多M位年龄区间在L,R之间的老板的名字年龄和财富,按照财富降序,年龄升序,姓名字典序输出。

AAAAAccepted code:

 1 #define HAVE_STRUCT_TIMESPEC
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 string s;
 5 typedef struct account{
 6     string name;
 7     int age,worth;
 8 };
 9 bool cmp(account a,account b){
10     if(a.worth!=b.worth)
11         return a.worth>b.worth;
12     if(a.age!=b.age)
13         return a.age<b.age;
14     return a.name<b.name;
15 }
16 vector<account>vv;
17 vector<account>v;
18 int sum[207];
19 int main(){
20     ios::sync_with_stdio(false);
21     cin.tie(NULL);
22     cout.tie(NULL);
23     int n,k;
24     cin>>n>>k;
25     int age,w;
26     for(int i=1;i<=n;++i){
27         cin>>s>>age>>w;
28         account tamp;
29         tamp.name=s;
30         tamp.age=age;
31         tamp.worth=w;
32         vv.push_back(tamp);
33     }
34     int x,l,r;
35     sort(vv.begin(),vv.end(),cmp);
36     for(int i=0;i<vv.size();++i)//根据数据规模优化,大幅缩短运行时间
37         if(sum[vv[i].age]<100){
38             v.push_back(vv[i]);
39             ++sum[vv[i].age];
40         }
41     for(int i=1;i<=k;++i){
42         cin>>x>>l>>r;
43         cout<<"Case #"<<i<<":\n";
44         int flag=0;
45         for(int j=0;j<v.size();++j){
46             if(v[j].age>=l&&v[j].age<=r){
47                 cout<<v[j].name<<" "<<v[j].age<<" "<<v[j].worth<<"\n";
48                 --x;
49                 flag=1;
50             }
51             if(!x)
52                 break;
53         }
54         if(!flag)
55             cout<<"None\n";
56     }
57     return 0;
58 }

 

 

 

posted @ 2019-10-09 01:30  sewage  阅读(150)  评论(0编辑  收藏  举报