题目: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;
}
来源: http://blog.youkuaiyun.com/acm_ted/article/details/20148217