Beautiful String
問題概要
アルファベットに1〜26の点数が付いている。与えられた文字列が最高得点になる時の得点を計算せよ。
考え方
- 多い文字に高い得点付ければいいんじゃない?
- 文字数カウントして個数をソートすれば大丈夫っぽい。
コード
#include <algorithm> #include <cctype> #include <cstdlib> #include <iostream> #include <string> #include <vector> using namespace std; int Solve() { string s; vector<int> count(26, 0); getline(cin, s); for (int i = 0; i < s.size(); ++i) { if (!isalpha(s[i])) continue; ++count[tolower(s[i]) - 'a']; } sort(count.begin(), count.end()); int cost = 0; for (int i = 0; i < 26; ++i) { cost += (i + 1) * count[i]; } return cost; } int main(void) { string n_str; getline(cin, n_str); int n = atoi(n_str.c_str()); for (int i = 0; i < n; ++i) { cout << "Case #" << (i + 1) << ": " << Solve() << "\n"; } return 0; }