期末考试过后,老师想知道对于语文、数学、英语这三科考试,哪三位学生考了总分的前三名。总分相同的同学,语文分高的排名在前,总分和语文成绩都相同的同学,数学分高的排名在前,总分、语文和数学成绩相同的学生,学号小的在前。请你帮老师写一个程序来完成这项工作。(保证没有两个及以上的学生三科分数都相同)
输入数据
第一行,一个整数N,表示总人数;第二到第N+1行,每行四个整数,每个整数之间以一个空格来隔开,分别表示学生的学号、语文分数、数学分数、英语分数(每科分数都在0到100之间)。
输出数据
三个整数,分别为总分第一名、第二名和第三名的学生的学号,相邻整数之间空一格。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
int n;
struct score
{
int id,yy,sx,yw,sum;
}a[100010];
bool cmp(score x,score y)
{
if(x.sum!=y.sum) return x.sum>y.sum;
if(x.yw!=y.yw) return x.yw>y.yw;
if(x.sx!=y.sx) return x.sx>y.sx;
return x.id<y.id;
}
int main()
{
freopen("rank.in","r",stdin);
freopen("rank.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i].id>>a[i].yw>>a[i].sx>>a[i].yy;
a[i].sum=a[i].yw+a[i].sx+a[i].yy;
}
sort(a+1,a+n+1,cmp);
cout<<a[1].id<<' '<<a[2].id<<' '<<a[3].id;
return 0;
}