标签:
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;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012313382/article/details/47090065