P5740 【深基7.例9】最厉害的学生
题目描述
现有 $N$ 名同学参加了期末考试,并且获得了每名同学的信息:姓名(不超过 $8$ 个字符的仅有英文小写字母的字符串)、语文、数学、英语成绩(均为不超过 $150$ 的自然数)。总分最高的学生就是最厉害的,请输出最厉害的学生各项信息(姓名、各科成绩)。如果有多个总分相同的学生,输出靠前的那位。
输入格式
第一行输入一个正整数 $N$,表示学生个数。
第二行开始,往下 $N$ 行,对于每一行首先先输入一个字符串表示学生姓名,再输入三个自然数表示语文、数学、英语的成绩。均用空格相隔。
输出格式
输出最厉害的学生。
输入输出样例 #1
输入 #1
3
senpai 114 51 4
lxl 114 10 23
fafa 51 42 60
输出 #1
senpai 114 51 4
说明/提示
数据保证,$1 \leq N \leq 1000$,姓名为长度不超过 $8$ 的字符串,语文、数学、英语成绩均为不超过 $150$ 的自然数。
#include<bits/stdc++.h>
using namespace std;
int n;
struct N
{
string name;
int shu, yu, ying, zong;
}a[10005];
bool cmp(const N p, const N b)
{
return p.zong > b.zong;
}
int main()
{
// freopen("C:/Users/hugemaker/Downloads/P5740_1.in","r",stdin);
// freopen("C:/Users/hugemaker/Downloads/out.out","w",stdout);
cin >> n;
for(int i=0; i<n; i++)
{
cin >> a[i].name >> a[i].yu >> a[i].shu >> a[i].ying;
a[i].zong = a[i].yu + a[i].shu + a[i].ying;
}
vector<N> b;
set<int> sc;
int count=0;
for(int i=0; i<n; i++) {
if(sc.count(a[i].zong)==0){
b.push_back(a[i]);
sc.insert(a[i].zong);
count++;
}
}
// cout << "没排序:"<<endl;
// for(int i=0; i<n; i++)
// {
// cout<< a[i].name << " " << a[i].yu << " " << a[i].shu << " " << a[i].ying<<endl;
// }
sort(b.begin(), b.end(), cmp);
// cout << "排序后:"<<endl;
// for(int i=0; i<count; i++)
// {
// cout<< b[i].name << " " << b[i].yu << " " << b[i].shu << " " << b[i].ying<<endl;
// }
cout<< b[0].name << " " << b[0].yu << " " << b[0].shu << " " << b[0].ying<<endl;
// fclose(stdin);
// fclose(stdout);
return 0;
}