http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&cid=832

http://poj.org/problem?id=1002

In the world line 1.048596%

回到了比过去还遥远的过去,拯救了牧之原翔子和樱岛麻衣后,世界重归平静。

时间转眼就到了正月新年。梓川咲太却颇不宁静。

“有的时候记住一个电话号码的方法即使把他写成一个容易记住的单词或者短语。比如说要打电话给维克多·孔多利亚大学脑科学研究所,可以拨打TUT-GLOP“

”有时候又只是把号码中间的部分数字写成单词,比如说打给310-GINO来向Gino's订一份pizza。”

“还有时候记住一个电话号码的绝佳方式是对号码的数字进行分组,比如说拨打3-10-10-10订一份pizza”

“呜哇好难记哦。还有樱岛麻衣小姐好喜欢pizzaaaaa....”趴在暖桌上的梓川咲太开始嘴皮,被对面的樱岛麻衣狠狠的踹了一脚。

“A, B, 和C 映射到 2

D, E, 和F 映射到 3

G, H, 和I 映射到 4

J, K, 和L 映射到 5

M, N, 和O 映射到 6

P, R, 和S 映射到 7

T, U, 和V 映射到 8

W, X, 和Y 映射到 9

大概就是这样的映射关系,还有电话号码的标准格式是七位十进制数,并在第三、第四位数字之间有一个连接符。当然Q和Z没有映射到任何数字,连字符不需要拨号,可以任意添加和删除。 那么为什么没有Q和Z呢?因为QZnb啊!!!”

为什么在新年的时候要帮助樱岛麻衣整理电话本呢?梓川咲太想不通,但这是樱岛麻衣的委托,那就必须做了。

“比如说 TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。 如果两个号码有相同的标准格式,那么他们就是等同的(相同的拨号)”

“好了讲完了,咲太你快点把里面相同的电话号码的标准格式都输出出来,然后在旁边写上重复次数。如果没有重复的写一个No duplicates.就好了。”

梓川咲太还是懒得动脑。

“做完了给你奖励。”

...

“请务必穿兔女郎装!!!”

 

 

Input

多组输入输出

对于每组输入

第一行是一个正整数n(n<=100000),表示电话号码薄中号码的数量。

余下的每行是一个电话号码。

每个电话号码由数字,大写字母(除了Q和Z)以及连接符组成。

每个电话号码中只会刚好有7个数字或者字母。

输入保证n的总和不超过200000

 

 

Output

对于每个出现重复的号码产生一行输出

每一行是重复的号码的标准格式紧跟一个空格然后是它的重复次数。

如果存在多个重复的号码,则按照号码的字典升序输出。

如果没有重复的号码,输出一行: “No duplicates.”(没有双引号)

 

 

Sample Input


 

12 4873279

ITS-EASY

888-4567

3-10-10-10

888-GLOP

TUT-GLOP

967-11-11

310-GINO

F101010

888-1200

-4-8-7-3-2-7-9-

487-3279

 

 

Sample Output


 

310-1010 2

487-3279 4

888-4567 3

C++版本一

https://www.cnblogs.com/MingSD/p/10050324.html

 

#include<bits/stdc++.h>
using namespace std;
#define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout);
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define pb push_back
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lch(x) tr[x].son[0]
#define rch(x) tr[x].son[1]
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
typedef pair<int,int> pll;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const LL mod =  (int)1e9+7;
const int N = 1e5 + 100;
char mp[N];
map<string, int> ms;
string str, s;
int main(){
    int n;
    ios::sync_with_stdio(false);
    cin.tie(0);
    mp['A'] = mp['B'] = mp['C'] = '2';
    mp['D'] = mp['E'] = mp['F'] = '3';
    mp['G'] = mp['H'] = mp['I'] = '4';
    mp['J'] = mp['K'] = mp['L'] = '5';
    mp['M'] = mp['N'] = mp['O'] = '6';
    mp['P'] = mp['R'] = mp['S'] = '7';
    mp['T'] = mp['U'] = mp['V'] = '8';
    mp['W'] = mp['X'] = mp['Y'] = '9';

    while(cin >> n){
        ms.clear();
        for(int i = 1; i <= n; ++i){
            cin >> str;
            s.clear();
            for(int j = 0; j < str.size(); ++j){
                if(isalpha(str[j])){
                    s.pb(mp[str[j]]);
                }
                else if(isdigit(str[j]))
                    s.pb(str[j]);
                if(s.size() == 3) s.pb('-');
            }
            ms[s]++;
        }
        int f = 0;
        //cout << "FFF" << endl;
        for(auto it = ms.begin(); it != ms.end(); ++it){
            if(it->se > 1){
                f = 1;
                cout << it->fi << " " << it->se << endl;;
            }
        }
        if(!f) puts("No duplicates.");
    }
    return 0;
}