这个题出的很有技巧,我做了三四遍没有AC,(我的水平水)*##,上网看了一下,找到了一个非常好的思路,
具体如下,每一组数字代表着N中不同的字符串,同理,每一个字符串都只对应着一组数字,
如果读取数字转成一大堆字符串,再从dic中找,时间复杂度非常大,所以,我们可以从dic中读取
字符串,然后全部转为数字,从比赛给的file.in文件中读取数字,直接和dic中转换出来的数字进行匹配
,这样便可迅速找出你所需要的字符串。
/*
ID: karl
PROG: namenum
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
string name2number(string name){
char c=0;
int value=0;
ostringstream buf;
for(string::iterator iter=name.begin();iter!=name.end();iter++){
c=*iter;
if(c>'Q'){
value = (c-1-'A')/3 + 2;
}else{
value = (c-'A')/3 + 2;
}
buf<<value;
}
return buf.str();
}
int main() {
ofstream fout("namenum.out");
ifstream fin("namenum.in");
ifstream dict_fin("dict.txt");
string value;
fin>>value;
//cout<<value<<endl;
string name;
bool not_found=true;
while(dict_fin>>name){
string number = name2number(name);
//cout<<"name:"<<name<<"-->"<<number<<endl;
if(number != value)
continue;
fout<<name<<endl;
not_found=false;
}
if(not_found)
fout<<"NONE"<<endl;
dict_fin.close();
fin.close();
fout.close();
return 0;
}