老排序题了,但是这里排序应在读取之后,如果在查询时再对每个排序有一个点会超时。
#include <bits/stdc++.h>
using namespace std;
struct Node{
string name;
int age,money;
bool friend operator <(Node a,Node b){
if(a.money!=b.money)return a.money>b.money;
else if(a.age!=b.age)return a.age<b.age;
else return a.name<b.name;
}
};
vector<Node> vec;
int main(){
int num,query;
scanf("%d%d",&num,&query);
for(int i=0;i<num;i++){
Node nd;
nd.name.resize(10);
scanf("%s%d%d",&nd.name[0],&nd.age,&nd.money);
vec.push_back(nd);
}
sort(vec.begin(),vec.end());
for(int i=0;i<query;i++){
int n,range1,range2;
scanf("%d%d%d",&n,&range1,&range2);
vector<Node> res;
for(int j=0;j<num;j++){
if(res.size()==n)break;
if(vec[j].age<=range2&&vec[j].age>=range1){
res.push_back(vec[j]);
}
}
printf("Case #%d:\n",i+1);
for(auto item:res){
printf("%s %d %d\n",item.name.c_str(),item.age,item.money);
}
if(res.empty())printf("None\n");
}
}