题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1055
PAT上有些题目的时间还是卡的比较紧的,就像这题,题目很平常,但总是有个case过不去。
先给出代码吧,以后再改进。
case 2超时版本:
//#include "StdAfx.h" #include<stdio.h> #include<string> #include<map> #include<iostream> #include<vector> #include<cstring> #include<stdlib.h> #include<algorithm> using namespace std; struct people{ char name[10]; int age; int nworth; }; vector<people>pp; bool cmp(const struct people &a,const struct people &b){ if(a.nworth!=b.nworth) return a.nworth>b.nworth; else if(a.age!=b.age) return a.age<b.age; else return strcmp(a.name,b.name)<0; } int main() { //freopen("D://test.txt","r",stdin); pp.clear(); people temp; int N,K; scanf("%d %d",&N,&K); while(N--){ scanf("%s %d %d",&temp.name,&temp.age,&temp.nworth); pp.push_back(temp); } sort(pp.begin(),pp.end(),cmp); int M,Amin,Amax,j; for(j=0;j<K;j++){ scanf("%d %d %d",&M,&Amin,&Amax); printf("Case #%d:\n",j+1); int count=0; bool flag=false; vector<people>::size_type i; int num=pp.size(); for(i=0;i<num;++i){ if(count>=M) break; if(pp[i].age>=Amin&&pp[i].age<=Amax){ if(!flag){ flag=true; } if(count<M){ ++count; printf("%s %d %d\n",pp[i].name,pp[i].age,pp[i].nworth); } } } if(!flag) printf("None\n"); } return 0; }
//#include "StdAfx.h" #include<stdio.h> #include<string> #include<map> #include<iostream> #include<vector> #include<cstring> #include<stdlib.h> #include<algorithm> using namespace std; struct people{ char name[10]; int age; int nworth; bool operator<(const people &A)const{ return age<A.age; } }; vector<people>pp,cc; bool cmp(const struct people &a,const struct people &b){ if(a.nworth!=b.nworth) return a.nworth>b.nworth; else if(a.age!=b.age) return a.age<b.age; else return strcmp(a.name,b.name)<0; } int main() { //freopen("D://test.txt","r",stdin); pp.clear(); people temp; int N,K; scanf("%d %d",&N,&K); while(N--){ scanf("%s %d %d",&temp.name,&temp.age,&temp.nworth); pp.push_back(temp); } //sort(pp.begin(),pp.end(),cmp); sort(pp.begin(),pp.end()); int M,Amin,Amax,j; for(j=0;j<K;j++){ scanf("%d %d %d",&M,&Amin,&Amax); printf("Case #%d:\n",j+1); int count=0; bool flag=false; vector<people>::size_type i; int num=pp.size(); cc.clear(); for(i=0;i<num;++i){ if(pp[i].age<Amin)continue; if(pp[i].age<=Amax)cc.push_back(pp[i]); if(pp[i].age>Amax)break; } if(cc.size()==0){ printf("None\n"); break; } sort(cc.begin(),cc.end(),cmp); count=0; for(i=0;i<cc.size();++i){ if(count<M){ ++count; printf("%s %d %d\n",cc[i].name,cc[i].age,cc[i].nworth); } } } return 0; }