PKU 1002 487-3279
問題
(http://wikiwiki.jp/pku/?1002%20487-3279)。
解法
map使うと簡単、入力を全部数えていって、複数あるやつだけ表示させる。 cin使うとTLEになった
コード
int n; vector<string>s; char in[100]; int main(){ map<char, int>m; m['A'] = m['B'] = m['C'] = '2'; m['D'] = m['E'] = m['F'] = '3'; m['G'] = m['H'] = m['I'] = '4'; m['J'] = m['K'] = m['L'] = '5'; m['M'] = m['N'] = m['O'] = '6'; m['P'] = m['R'] = m['S'] = '7'; m['T'] = m['U'] = m['V'] = '8'; m['W'] = m['X'] = m['Y'] = '9'; scanf("%d", &n); s.resize(n); map<string, int>res; rep(i, n){ scanf("%s", in); s[i] = string(in); size_t pos; while((pos = s[i].find_first_of("-")) != string::npos) s[i].erase(pos, 1); rep(j, s[i].size()){ if(s[i][j] <= '9' && s[i][j] >= '0') continue; s[i][j] = m[s[i][j]]; } s[i].insert(3, "-"); if(res.count(s[i])) res[s[i]]++; else res[s[i]] = 1; } int f = 1; for(map<string, int>::iterator it = res.begin(); it != res.end(); it++){ if(it->second <= 1) continue; cout << it->first; printf(" %d\n", it->second); f = 0; } if(f) puts("No duplicates."); return 0; }