这一题开始写 case2超时 百度后 看别人说要剪植 剪完后发现case2错误 看了一下别人代码才发现别人是输入 排序后剪 而我是边输入边剪
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
#include<iterator>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
using namespace std;
typedef struct node{
char name[9];
int age;
int worth;
}node;
bool cmp1(node A, node B)
{
if(A.worth<B.worth)
return false;
else if(A.worth==B.worth)
{
if(A.age>B.age)
return false;
else if(A.age==B.age)
{
if(strcmp(A.name,B.name)>0)
return false;
}
}
return true;
}
int main()
{
int n,m,k;
node a[100000];
scanf("%d%d",&n,&k);
int b[202]={0};
int c[100000];
int s=0;
for(int i=0;i<n;i++)
scanf("%s%d%d",a[i].name,&a[i].age,&a[i].worth);
sort(a,a+n,cmp1);
for(int i=0;i<n;i++)
if(++b[a[i].age]<101)
c[s++]=i;
int amin,amax;
for(int i=0;i<k;i++)
{
scanf("%d%d%d",&m,&amin,&amax);
printf("Case #%d:\n",i+1);
int index=0;
for(int j=0;j<s;j++)
if(a[c[j]].age>=amin&&a[c[j]].age<=amax&&index<m)
{
printf("%s %d %d\n",a[c[j]].name,a[c[j]].age,a[c[j]].worth);
index++;
}
if(!index)
printf("None\n");
}
return 0;
}