USACO基础第六题Name That Number
这个题简直就是赤裸裸的map,虽然没用过,但是很明显是,也不难,看一眼就会了。因为有可能会给12个数字,所以肯定不能枚举组合吧。文件里面一共才五千个名字,一次循环简直根本花不了什么时间。只要一个字符串一个字符串检查,再决定是否输出就够了。基础题,不多说了。
/* ID: like_091 PROG: namenum LANG: C++ */ #include<iostream> #include<fstream> #include<algorithm> #include<string> #include<map> using namespace std; map<char, char> m; void fun() { //此处比较脑残 m['A'] = m['B'] = m['C'] = '2'; m['D'] = m['E'] = m['F'] = '3'; m['G'] = m['H'] = m['I'] = '4'; m['J'] = m['K'] = m['L'] = '5'; m['M'] = m['N'] = m['O'] = '6'; m['P'] = m['R'] = m['S'] = '7'; m['T'] = m['U'] = m['V'] = '8'; m['W'] = m['X'] = m['Y'] = '9'; } int main(void) { ifstream fin("namenum.in"); ofstream cout("namenum.out"); string s, t; fin>>s; fun();//预处理 //用了两个不同的文件 ifstream cin("dict.txt"); bool temp = true; while (cin>>t) { //如果长度不同直接下一个 if (s.length() != t.length()) continue; bool flag = true; for (int i = 0; i < t.length(); i++) if (m[t[i]] != s[i]) { flag = false; break; } if (flag) { //猥琐的标记 temp = false; cout<<t<<endl; } } if (temp)cout<<"NONE"<<endl; //记住关闭输入流 fin.close(); return 0; }