您的位置:首页 > 其它

PAT1055. The World's Richest

2014-03-18 21:49 218 查看
自己写的代码有一个测试点超时,借鉴了以为仁兄的代码,在对结构体排序后,还要进行剪枝,去掉年龄出现100次以上的,编程真的是细节很重要,小菜我还要多多学习啊!

下面贴上AC代码:

#include <iostream>

#include <stdio.h>

#include <algorithm>

using namespace std;

struct person{

char name[10];

int age;

int net_worth;

}p[100001];

bool cmp(const person& a,const person& b)

{

if(a.net_worth>b.net_worth) return true;

else if(a.net_worth==b.net_worth)

{

if(a.age<b.age) return true;

else if(a.age==b.age)

{

int t=strcmp(a.name,b.name);

if(t<0) return true;

else return false;

}

else return false;

}

else return false;

}

int main()

{

int n,k,m,amin,amax;

//freopen("E:\\个人程序\\机试练习\\pat练习\\input.txt","r",stdin);

//freopen("E:\\个人程序\\机试练习\\pat练习\\output.txt","w",stdout);

scanf("%d%d",&n,&k);

for(int i=0;i<n;i++)

{

scanf("%s%d%d",p[i].name,&p[i].age,&p[i].net_worth);

}

int count=1;

sort(p,p+n,cmp);

int ageCount[201]={0};

int filternum=0;

int *filter=new int
;

for(int i=0;i<n;i++)

{

if(++ageCount[p[i].age]<101)

{

filter[filternum++]=i;

}

}

while(count<=k)

{

printf("Case #%d:\n",count);

scanf("%d%d%d",&m,&amin,&amax);

int cnt=0;

for(int i=0;i<filternum;i++)

{

int index=filter[i];

if(p[index].age>=amin&&p[index].age<=amax)

{

printf("%s %d %d\n",p[index].name,p[index].age,p[index].net_worth);

cnt++;

}

if(cnt==m) break;

}

if(cnt==0) printf("None\n");

count++;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: