海军学校四年级学生衡量一年级学生是否能开军舰靠的是精神值。
精神值的计算公式如下:
value=timesD∗length
其中的value代表的的是一年级学生的精神值,D代表一年级学生说话声音的分贝,length记录的是说话的句子长度,times记录的是说话的时间。
而他们会按照如下方式对一年级学生进行测试:在单位时间内(即times=1)让一年级学生依次进行自我介绍,同时记录他们说话声音的分贝,和自我介绍的内容。
现在四年级学生们已经采集了所有一年级学生的数据,他们想请你找到一年级学生里最有精神的学生(即value最大的学生),并让他开军舰。现在请你帮帮忙。
输入格式
第一行一个正整数n(1≤n≤2⋅104),代表一年级学生的人数。
接下来n行,每行输入格式如下:
name D introdutction
其中name为一个长度不超过20的字符串(即1≤∣name∣≤20),D为正整数,且0≤D≤200,introduction为长度不超过100的字符串(即1≤∣introduction∣≤100)。
所有的字符串仅由小写的英文字母组成
输出格式
输出共两行,第一行输出最大的精神值。
第二行按照如下格式输出
XXX:hao!hen you jing shen!
其中XXX请替换成精神值最大的一年级学生的名字。
如果有多个精神值最大的学生,请按照输入顺序依此按上述格式输出一年级学生的名字。
输入样例
1
pingtianyilang 0 aaaaaaa
输出样例
0
pingtianyilang:hao!hen you jing shen!
提示
对于样例,最有精神的学生是pingtianyilang,其精神值为0×6=0
不知道为什么有一个测试点不过,到最后也没改出来,只能先放放了
//
// Created by TIGA_HUANG on 2020/10/6.
//
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
using namespace std;
struct node {
string name, introduction;
double D;
bool operator<(node &x) const {
return x.D * x.introduction.length() < D * introduction.length();
}
};
vector<node> v;
int main() {
int N;
cin >> N;
v.resize(N + 5);
for (int i = 0; i < N; ++i) {
cin >> v[i].name >> v[i].D >> v[i].introduction;
}
sort(v.begin(), v.end());
double infection = 0;
for (int i = 0; i < N; ++i) {
if (i == 0) {
infection = v[i].D * v[i].introduction.length();
cout << fixed << setprecision(0) << infection << '\n';
cout << v[i].name << ":hao!hen you jing shen!\n";
} else {
if (v[i].D * v[i].introduction.length() == infection) {
cout << v[i].name << ":hao!hen you jing shen!\n" ;
} else {
break;
}
}
}
return 0;
}