首先定义一个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")



京公网安备 11010502036488号