思路:
排序+输出,但是,注意范围,10^3*10^5就太大了,时间会超限,所以按照答案k的最大值缩小范围,
100以内,这样最多n为10^4。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 100100;
struct Node{
char name[50];
int age,score;
}cur[maxn];
vector <Node> vc;
bool cmp(Node a,Node b)
{
if(a.score!=b.score) return a.score>b.score;
else{
if(a.age!=b.age) return a.age<b.age;
else return strcmp(a.name,b.name)<0;
}
}
int vis[550];
int main(void)
{
int n,m,i,j,x,y,k;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++) scanf("%s %d %d",cur[i].name,&cur[i].age,&cur[i].score);
sort(cur,cur+n,cmp);
for(i=0;i<n;i++)
if(vis[cur[i].age]<=100){
vc.push_back(cur[i]);vis[cur[i].age]++;
}
int len=vc.size(),tp;
for(j=1;j<=m;j++){
scanf("%d%d%d",&k,&x,&y);tp=k;
printf("Case #%d:\n",j);
for(i=0;i<len&&k;i++)
if(vc[i].age>=x&&vc[i].age<=y){
printf("%s %d %d\n",vc[i].name,vc[i].age,vc[i].score);k--;
}
if(tp==k) printf("None\n");
}
return 0;
}