Name That Number
将所给的数字转换为字符串再进行搜索即可。转换过程中需要剪枝,查找是否有以当前字符串开头的姓名。
代码如下:
/*
ID: xhzdcyy1
PROB: namenum
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include<map>
#define cin fin
#define cout fout
using namespace std;
ifstream din ("dict.txt");
ofstream fout ("namenum.out");
ifstream fin ("namenum.in");
map<string,bool> mm;
string m[5000];
bool flag = false;
char b[15];
char c[10][3]={'0','0','0',
'0','0','0',
'A','B','C',
'D','E','F',
'G','H','I',
'J','K','L',
'M','N','O',
'P','R','S',
'T','U','V',
'W','X','Y'};
bool check(int n){
for(int i=0;i<5000;i++){
int k=0;
for(k=0;k<n;k++){
if(m[i][k]!=b[k]){
break;
}
}
if(k==n) return true;
}
return false;
}
void func(string a,int n){
if(!check(n)) return;
if(n==a.size()){
string tmp="";
for(int i=0;i<n;i++){
tmp=tmp+b[i];
}
if(mm[tmp]){
cout<<tmp<<endl;
flag=true;
}
return;
}
else{
for(int i=0;i<3;i++){
b[n]=c[a[n]-'0'][i];
func(a,n+1);
}
}
}
int main()
{
string dic;
int ccc=0;
while(din>>dic){
m[ccc++]=dic;
mm[dic]=true;
}
string a;
cin>>a;
func(a,0);
if(!flag) cout<<"NONE"<<endl;
return 0;
}