http://poj.org/problem?id=1002
一开始char数组长度30时WA,改成200就通过了。
1128K 579MS
#include <iostream><span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;"> </span></span>
#include <algorithm>
#include <string.h>
using namespace std;
struct phone_number{
char num[10];
}pn[100005];
char map[26] = {'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7',0,'7','7','8','8','8','9','9','9',0};
char s[200];
int amt,flag;
int cmp(struct phone_number &pn1,struct phone_number &pn2){
return strcmp(pn1.num,pn2.num)<0;
}
int main(){
int i,j,k;
scanf("%d",&amt);
for(i=0;i<amt;i++){
scanf("%s",s);
k=0;
for(j=0;j<strlen(s);j++){
if(s[j]=='-'||s[j]=='Q'||s[j]=='Z') continue;
if(s[j]>='A'&&s[j]<='Z')
pn[i].num[k++]=map[s[j]-'A'];
else pn[i].num[k++]=s[j];
if(k==3) pn[i].num[k++]='-';
}
}
sort(pn,pn+amt,cmp);
k=1;
for(i=0;i<amt;i++){
if(strcmp(pn[i].num,pn[i+1].num)==0){
k++;
}
else{
if(k>1){
printf("%s %d\n",pn[i].num,k);
flag=1;
}
k=1;
}
}
if(flag==0) printf("No duplicates.\n");
return 0;
}