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;
}