题目链接:点击打开链接
#include <bits/stdc++.h>
using namespace std;
const int maxdif = 10000;
map<char, string> morse;
map<string, string> dict;
void encode(string &word)
{
string res;
for(int i = 0; i <= word.size(); i++)
res += morse[word[i]];
dict[word] = res;
}
int dif(string a, string b)
{
if(a==b)
return 0;
if(a.size() > b.size())
swap(a, b);
if(a == b.substr(0, a.size()))
return b.size() - a.size();
else
return maxdif;
}
string solve(const string &code)
{
string x = dict.begin()->second;
string ans = dict.begin()->first;
int min_dif = maxdif;
for(auto i = dict.begin(); i != dict.end(); i++)
{
int d = dif(code, i->second);
if(d < min_dif)
{
min_dif = d;
ans = i->first;
}
else if(d==0 && min_dif==0 && ans[ans.size()-1]!='!')
ans += '!';
}
if(min_dif)
ans += '?';
return ans;
}
int main()
{
string a, b;
while(cin >> a && a != "*")
{
cin >> b;
morse[a[0]] = b;
}
while(cin >> a && a != "*")
encode(a);
while(cin >> a && a != "*")
cout << solve(a) << endl;
return 0;
}