题目描述
现有 N 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 88 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 150150 的自然数)。总分最高的学生就是最厉害的,请输出最厉害的学生各项信息(姓名、各科成绩)。如果有多个总分相同的学生,输出靠前的那位。
输入格式
第一行输入一个正整数 N,表示学生个数。
第二行开始,往下 N 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
输出格式
输出最厉害的学生。
输入输出样例
输入
3 senpai 114 51 4 lxl 114 10 23 fafa 51 42 60
输出
senpai 114 51 4
说明/提示
数据保证,1≤N≤1000,姓名为长度不超过 88 的字符串,语文、数学、英语成绩均为不超过 150 的自然数。
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
const int N=2e5+10,M=1e3+10;
using namespace std;
struct Node
{
string name;
int chinese,math,eng,sum,id;
}stu[N];
bool cmp(Node a,Node b)
{
// if(a.sum>b.sum) return true;
// else return false;
if(a.sum!=b.sum)
{
return a.sum>b.sum;
}
else
{
// 当a的id更小时不交换顺序
return a.id<b.id;
}
}
signed main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
// 结构体赋值
string name;
int chinese,math,eng,id;
cin>>name>>chinese>>math>>eng;
int sum = chinese+math+eng;
stu[i] = {name,chinese,math,eng,sum,i};
}
sort(stu,stu+n-1,cmp);//cmp return true时不交换
cout<<stu[0].name<<" "<<stu[0].chinese<<" "<<stu[0].math<<" "<<stu[0].eng;
}