#include <iostream>
#include <vector>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <cstring>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>
#include <chrono>
#include <ctime>
#include <cmath>
#include <cctype>
#include <string>
#include <cstdio>
#include <iomanip>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <iterator>
using namespace std;
string Morse[128], Context[128],CMorse[128];
int total = 0;
int main()
{
while (cin >> Morse[0] && Morse[0][0] != '*') cin >> Morse[Morse[0][0]];
while (cin >> Context[total] && Context[total][0] != '*') {
for (int i = 0; i < Context[total].size(); ++i) {
CMorse[total] += Morse[Context[total][i]];
}
++total;
}
while (cin >> Morse[0] && Morse[0][0] != '*') {
int cnt = 0,id = -1,id2 = -1,cnt2 = 0x3f3f3f3f;
for (int i = 0; i < total; ++i) {
if (Morse[0] == CMorse[i] ) {
if (id == -1) id = i;
else if(CMorse[id] > CMorse[i]) id = i;
++cnt;
}
else if (id == -1) {
int a = Morse[0].size(), b = CMorse[i].size(), len = min(a, b),k = 0,t;
for (; k < len; ++k) {
if(Morse[0][k] != CMorse[i][k]) break;
}
//增加 删除只能选一种
if (k == len) {
t = abs(a - b);
if (cnt2 > t) { cnt2 = t; id2 = i; }
else if (cnt2 == t) {
if (id2 == -1 || CMorse[id2] > CMorse[i]) { cnt2 = t; id2 = i; }
}
}
}
}
if (id == -1) {
cout << Context[id2] << "?" << endl;
}
else {
if (cnt == 1)cout << Context[id] << endl;
else cout << Context[id] << "!"<< endl;
}
}
return 0;
}
习题4-6(uva-508)
最新推荐文章于 2020-12-06 17:10:52 发布