首先定义一个map用来统计每个字母出现的次数,然后使用vector对每个字母以出现次数从大到小排序,最后将次数乘以由26开始依次减小的数字,计算出它们的和即为名字最大可能的漂亮度。

#include <iostream>
#include <map>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    map<char, int> letters;
    string s;
    vector<int> times;
    for (int i = 0; i < n; i++) {
        cin >> s;
        for (char letter : s) {
            if (letters.find(letter) == letters.end()) {
                letters.insert({letter, 1});
            } else {
                letters[letter]++;
            }
        }
        int sum = 0;
        for (pair<char, int> letter : letters) {
            times.push_back(letter.second);
        }
        sort(times.begin(), times.end(), greater());
        int count = 0;
        int number = 26;
        while (count < times.size()) {
            sum += number * times[count++];
            number--;
        }
        cout << sum << endl;
        times.clear();
        letters.clear();
    }
    return 0;
}
// 64 位输出请用 printf("%lld")