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; }