487-3279

首先声明,此代码没有通过poj,只是供大家研究分享,希望也能帮我找出缺点。

直接上代码,我的主要思想是用哈希映射,然后转换每个字符,考虑分为小写,大写,数字

代码如下:

#include <iostream>
#include<algorithm>
#include<iterator>
#define N 100010
using namespace std;
int hash[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9,9};
int a[N];
int main()
{
    int n,sum=0,cnt=0;
    string tmp;
    cin >> n ;
    while(n--)
    {
        cin >> tmp;
        int t = 0 ;
        for(unsigned i=0;i<tmp.size();++i)
            if(tmp[i]>='A'&&tmp[i]<='Z')
                t = t*10+hash[tmp[i]-65];
            else if(tmp[i]>='0'&&tmp[i]<='9')
                t = t*10+tmp[i]-48;
        a[cnt++] = t ;
    }
    sort(a,a+cnt);
    bool flag = true;
    for(int i=0,j;i<cnt;)
    {
        int t = 1 ;
        for(j=i+1;j < cnt ;++j)
            if(a[i]==a[j])
                ++t;
            else
                break;
        if(t>1)
        {
            cout << a[i]/10000 << "-" << a[i]%10000 << " " << t << endl;
            flag = false;
        }
        i = j ;
    }
    if(flag)
        cout << "No duplicates." <<endl;
    return 0;
}

你可能感兴趣的:(487-3279)