一个简单的哈希题目
首先枚举出所有可能出现的名字,然后这些名字与将早已保存在map的名字进行查找,能够找到的就输出。
难度等级:★☆☆☆☆
#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<fstream>
#include<algorithm>
#include<map>
#include<stdlib.h>
#include<vector>
#include<stack>
#include<queue>
#include<set>
using namespace std;
#define FOR(i,a,n) for(int i=a;i<n;i++)
#define REP(i,n) FOR(i,0,n)
map<string,bool> mp;
map<string,bool>::iterator it;
string name;
string number;
int len,cnt;
char dic[10][3]={{},{},{'A','B','C'},{'D','E','F'},
{'G','H','I'},{'J','K','L'},{'M','N','O'},
{'P','R','S'},{'T','U','V'},{'W','X','Y'}};
ifstream fin("namenum.in");
ifstream fdict("dict.txt");
ofstream fout("namenum.out");
void dfs(string check,int lev)
{
if(lev==len)
{
it=mp.find(check);
if(it!=mp.end())
{
fout<<it->first<<endl;
cnt++;
}
return ;
}
for(int i=0;i<3;i++)
{
int tmp=number[lev]-'0';
dfs(check+dic[tmp][i],lev+1);
}
}
int main()
{
while(getline(fdict,name)) mp[name]=true;
fin>>number;
len=number.size();
cnt=0;
for(int i=0;i<3;i++)
{
int tmp=number[0]-'0';
string ttmp="";
ttmp+=dic[tmp][i];
dfs(ttmp,1);
}
if(!cnt) fout<<"NONE"<<endl;
// system("pause");
return 0;
}