题目:http://pat.zju.edu.cn/contests/pat-a-practise/1062
题解:
代码:
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<string> #include<vector> #include<algorithm> using namespace std; #define MAX 100005 struct stu { string id; int d; int c; int summ; }stu[4][MAX]; bool cmp(const struct stu &a,const struct stu &b) { if(a.summ>b.summ) return true; else if(a.summ==b.summ) { if(a.d>b.d) return true; else if(a.d==b.d) return a.id<b.id; else return false; } else return false; } int main() { int n,l,h; int len[4]; memset(len,0,sizeof(len)); string id; char ch[10]; int d,c; scanf("%d%d%d",&n,&l,&h); for(int i=0;i<n;++i) { scanf("%s%d%d",ch,&d,&c); id=string(ch); if(d<l||c<l) continue; if(d>=h&&c>=h) { stu[0][len[0]].id=id; stu[0][len[0]].d=d; stu[0][len[0]].c=c; stu[0][len[0]].summ=d+c; ++len[0]; } else if(d>=h) { stu[1][len[1]].id=id; stu[1][len[1]].d=d; stu[1][len[1]].c=c; stu[1][len[1]].summ=d+c; ++len[1]; } else if(d<h&&d>=c) { stu[2][len[2]].id=id; stu[2][len[2]].d=d; stu[2][len[2]].c=c; stu[2][len[2]].summ=d+c; ++len[2]; } else { stu[3][len[3]].id=id; stu[3][len[3]].d=d; stu[3][len[3]].c=c; stu[3][len[3]].summ=d+c; ++len[3]; } } for(int i=0;i<4;++i) sort(stu[i],stu[i]+len[i],cmp); printf("%d\n",len[0]+len[1]+len[2]+len[3]); for(int i=0;i<4;++i) for(int j=0;j<len[i];++j) printf("%s %d %d\n",stu[i][j].id.c_str(),stu[i][j].d,stu[i][j].c); return 0; }