1. 程式人生 > >2018年廣東工業大學文遠知行杯新生程式設計競賽 1010 溫柔的手彼此相系β

2018年廣東工業大學文遠知行杯新生程式設計競賽 1010 溫柔的手彼此相系β

Problem Description

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

 

#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<map>
#include<stack>
#include<queue>
using namespace std;



int main() {
    char a[100];
    int n,m,j,k,i,T;

    while (cin>>T) 
    {
        getchar();
        map<string,int>mp;
        
        j=0;
        string s="";
        while(T--)
        {
            j=0;
            s="";
            gets(a);
            int len = strlen(a);
            for (i=0; i<len; i++) 
            {

                if (a[i]=='0') {
                    s.insert(j,"0");
                    j++;
                } else if (a[i]=='1') {
                    s.insert(j,"1");
                    j++;
                }
                if (a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='2') {
                    s.insert(j,"2");
                    j++;
                } else if (a[i]=='D'||a[i]=='E'||a[i]=='F'||a[i]=='3') {
                    s.insert(j,"3");
                    j++;
                } else if (a[i]=='G'||a[i]=='H'||a[i]=='I'||a[i]=='4') {
                    s.insert(j,"4");
                    j++;
                } else if (a[i]=='J'||a[i]=='K'||a[i]=='L'||a[i]=='5') {
                    s.insert(j,"5");
                    j++;
                } else if (a[i]=='M'||a[i]=='N'||a[i]=='O'||a[i]=='6') {
                    s.insert(j,"6");
                    j++;
                } else if (a[i]=='P'||a[i]=='R'||a[i]=='S'||a[i]=='7') {
                    s.insert(j,"7");
                    j++;
                } else if (a[i]=='T'||a[i]=='U'||a[i]=='V'||a[i]=='8') {
                    s.insert(j,"8");
                    j++;
                } else if (a[i]=='W'||a[i]=='X'||a[i]=='Y'||a[i]=='9') {
                    s.insert(j,"9");
                    j++;
                }

            }
            s.insert(3,"-");
            mp[s]++;
            //cout<<"***"<<s<<endl;

        }
        bool flag = false;
        for (map<string,int>::iterator it = mp.begin(); it!=mp.end(); it++) {
            if (it->second>=2) {
                flag = true;
                cout<<it->first<<" "<<it->second<<endl;
            }

        }
        if (flag==false)
            cout<<"No duplicates."<<endl;

    }
    return 0;
}