POJ 1002 487-3279(快排)

时间:2022-06-19 19:39:32

AC 397MS

题意:中文题就不说了

思路:可以考虑记录下所有的数,然后排序,再一起统计就可以了!需要注意的是电话号码输出是有前导0的,还有字符串的数组该开大一点

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int maxn=100000+10;
            
char str[maxn];
int a[maxn];

int Map(char ch)
{
	if(ch=='A' || ch=='B' || ch=='C')
		return 2;
	else if(ch=='D' || ch=='E' || ch=='F')
		return 3;
	else if(ch=='G' || ch=='H' || ch=='I')
		return 4;
	else if(ch=='J' || ch=='K' || ch=='L')
		return 5;
	else if(ch=='M' || ch=='N' || ch=='O')
		return 6;
	else if(ch=='P' || ch=='R' || ch=='S')
		return 7;
	else if(ch=='T' || ch=='U' || ch=='V')
		return 8;
	else if(ch=='W' || ch=='X' || ch=='Y')
		return 9;
    return 0;
}

struct node
{
    int num;
    int tot;
}ans[maxn];

int main()
{
    #ifndef ONLINE_JUDGE
    freopen("in.cpp","r",stdin);
    #endif // ONLINE_JUDGE
    int n;
    scanf("%d",&n);
    memset(a,0,sizeof(int)*(n+2));
    for(int i=0;i<n;i++)
    {
        scanf("%s",str);
        int len=strlen(str);
        for(int j=0;j<len;j++)
        {
            int ok;
            if(str[j]>='0'&&str[j]<='9')
            {
                ok=str[j]-'0';
                a[i]=a[i]*10+ok;
                continue;
            }
            ok=Map(str[j]);
            if(ok!=0)
            {
                a[i]=a[i]*10+ok;
            }
        }
        ans[i].tot=1;
    }
    sort(a,a+n);
    int cnt=0;
    for(int i=1;i<n;i++)
    {
        //printf("%d\n",a[i]);

        if(a[i]==a[i-1])
        {
            ans[cnt].tot++;
            if(i==n-1)
                ans[cnt++].num=a[i];
        }
        else
        {
            ans[cnt++].num=a[i-1];
        }
    }
    //printf("\n");
    int flag=0;
    for(int i=0;i<cnt;i++)
    {
        //printf("%d %d\n",ans[i].num,ans[i].tot);
        if(ans[i].tot>=2)
        {
            flag++;
            printf("%03d-%04d %d\n",ans[i].num/10000,ans[i].num%10000,ans[i].tot);
        }
    }
    if(!flag)
    {
        printf("No duplicates.\n");
    }
    return 0;
}