问题链接:HDU1113 Word Amalgamation。
这个问题是一个字典问题,自然用map来实现。问题在于还需要转个弯,不然会掉进陷阱里去的。
查字典问题,通常是单词按照字典顺序存放,然后将要查的单词拆成字母,按单词的字母顺序去查字典。然而要是这样做程序的逻辑就太零碎繁杂了。
于是,把单词中的字符排个顺序作为关键字,来查单词的话就方便了。需要注意的一点,不同的单词有可能具有相同的关键字。
这个程序的关键有容器类map的使用,算法库<algorithm>中函数sort()的使用。
AC程序如下:
/* HDU1113 Word Amalgamation */
#include <iostream>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
map<string, string> dic;
string word, key;
while(cin >> word && word != "XXXXXX") {
key = word;
sort(key.begin(), key.end());
dic[word] = key;
}
while(cin >> key && key != "XXXXXX") {
sort(key.begin(), key.end());
bool flag = true;
for(map<string, string>::iterator it=dic.begin(); it!=dic.end(); it++) {
if(it->second == key) {
cout << it->first << endl;
flag = false;
}
}
if(flag)
cout << "NOT A VALID WORD" << endl;
cout << "******" << endl;
}
return 0;
}原文:http://blog.csdn.net/tigerisland45/article/details/51704589