这道题本上没什么难度,就是测试数据太bt,不是超时就是超内存,搞了好一阵子,尝试了n种方法,最后选用了简单方便的map容器。只不过时间超的厉害.附poj1002 code:
#include<iostream>
#include<map>
#include<math.h>
#include<string.h>
using namespace std;
char search(char c){
if(c=='A'||c=='B'||c=='C')
return '2';
if(c=='D'||c=='E'||c=='F')
return '3';
if(c=='G'||c=='H'||c=='I')
return '4';
if(c=='J'||c=='K'||c=='L')
return '5';
if(c=='M'||c=='N'||c=='O')
return '6';
if(c=='P'||c=='R'||c=='S')
return '7';
if(c=='T'||c=='U'||c=='V')
return '8';
if(c=='W'||c=='X'||c=='Y')
return '9';
else
return '0';
}
int main(){
typedef map<int,int> UDT_MAP_INT_INT;
int n,j,k,integer;
while(scanf("%d",&n)!=-1){
UDT_MAP_INT_INT number;
char t[255],num[9];
UDT_MAP_INT_INT::iterator ti;
while(n--){
scanf("%s",t);
k=0;
for(j=0;j<(int)strlen(t);j++){
if(t[j]=='-')
continue;
if(t[j]>=48&&t[j]<=57)
num[k++]=t[j];
else{
num[k++]=search(t[j]);
}
}
num[k]='\0';
integer=(num[0]-48)*(int)pow(10-0.0,6-0.0)+(num[1]-48)*(int)pow(10-0.0,5-0.0)+(num[2]-48)*(int)pow(10-0.0,4-0.0)+(num[3]-48)*(int)pow(10-0.0,3-0.0)+(num[4]-48)*(int)pow(10-0.0,2-0.0)+(num[5]-48)*10+(num[6]-48);
ti=number.find(integer);
if(ti==number.end()){
number.insert(map<int, int> :: value_type(integer, 1));
}
else{
ti->second++;
}
}
int f=1;
UDT_MAP_INT_INT::iterator it=number.begin();
for(;it!=number.end();it++){
if(it->second>1){
printf("%03d-%04d %d\n",it->first/10000,it->first%10000,it->second);
f=0;
}
}
if(f)
printf("No duplicates.\n");
}
}
#include<iostream>
#include<map>
#include<math.h>
#include<string.h>
using namespace std;
char search(char c){
if(c=='A'||c=='B'||c=='C')
return '2';
if(c=='D'||c=='E'||c=='F')
return '3';
if(c=='G'||c=='H'||c=='I')
return '4';
if(c=='J'||c=='K'||c=='L')
return '5';
if(c=='M'||c=='N'||c=='O')
return '6';
if(c=='P'||c=='R'||c=='S')
return '7';
if(c=='T'||c=='U'||c=='V')
return '8';
if(c=='W'||c=='X'||c=='Y')
return '9';
else
return '0';
}
int main(){
typedef map<int,int> UDT_MAP_INT_INT;
int n,j,k,integer;
while(scanf("%d",&n)!=-1){
UDT_MAP_INT_INT number;
char t[255],num[9];
UDT_MAP_INT_INT::iterator ti;
while(n--){
scanf("%s",t);
k=0;
for(j=0;j<(int)strlen(t);j++){
if(t[j]=='-')
continue;
if(t[j]>=48&&t[j]<=57)
num[k++]=t[j];
else{
num[k++]=search(t[j]);
}
}
num[k]='\0';
integer=(num[0]-48)*(int)pow(10-0.0,6-0.0)+(num[1]-48)*(int)pow(10-0.0,5-0.0)+(num[2]-48)*(int)pow(10-0.0,4-0.0)+(num[3]-48)*(int)pow(10-0.0,3-0.0)+(num[4]-48)*(int)pow(10-0.0,2-0.0)+(num[5]-48)*10+(num[6]-48);
ti=number.find(integer);
if(ti==number.end()){
number.insert(map<int, int> :: value_type(integer, 1));
}
else{
ti->second++;
}
}
int f=1;
UDT_MAP_INT_INT::iterator it=number.begin();
for(;it!=number.end();it++){
if(it->second>1){
printf("%03d-%04d %d\n",it->first/10000,it->first%10000,it->second);
f=0;
}
}
if(f)
printf("No duplicates.\n");
}
}

浙公网安备 33010602011771号