好!很有精神! (10分)

在这里插入图片描述

海军学校四年级学生衡量一年级学生是否能开军舰靠的是精神值。

精神值的计算公式如下:
value=​times​​D∗length​​

其中的value代表的的是一年级学生的精神值,D代表一年级学生说话声音的分贝,length记录的是说话的句子长度,times记录的是说话的时间。

而他们会按照如下方式对一年级学生进行测试:在单位时间内(即times=1)让一年级学生依次进行自我介绍,同时记录他们说话声音的分贝,和自我介绍的内容。

现在四年级学生们已经采集了所有一年级学生的数据,他们想请你找到一年级学生里最有精神的学生(即value最大的学生),并让他开军舰。现在请你帮帮忙。
输入格式

第一行一个正整数n(1≤n≤2⋅10​4​​),代表一年级学生的人数。

接下来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;
}

猜你喜欢

转载自blog.csdn.net/qq_44378358/article/details/108941948