GCJ 2016 Round 1B A: Getting the Digits
解法
一意に定まる。
コード
#include <bits/stdc++.h> using namespace std; string solve(const string &S) { map<int, int> cnt; for (int i = 0; i < S.size(); ++i) cnt[S[i]]++; vector<int> ans(10, 0); ans[0] = cnt['Z']; ans[2] = cnt['W']; ans[6] = cnt['X']; ans[8] = cnt['G']; ans[4] = cnt['U']; ans[3] = cnt['H'] - ans[8]; ans[1] = cnt['O'] - ans[0] - ans[2] - ans[4]; ans[5] = cnt['F'] - ans[4]; ans[7] = cnt['V'] - ans[5]; ans[9] = cnt['I'] - ans[5] - ans[6] - ans[8]; string T = ""; for (int i = 0; i < 10; ++i) { for (int j = 0; j < ans[i]; ++j) { T.push_back(i + '0'); } } return T; } int main() { cin.tie(0); ios::sync_with_stdio(false); int T; cin >> T; for (int testcase = 1; testcase <= T; ++testcase) { string S; cin >> S; cout << "Case #" << testcase << ": "; cout << solve(S) << endl; } }