去UVA上交了好几次,每次都是Runtime Error,上Udebug上测样例全都通过了,求指教!!!!
#include <bits/stdc++.h>
#define maxn 105
using i64 = long long;
using namespace std;
char table[maxn][10], words[maxn][15], morse[maxn][maxn];
char a, codes[maxn][maxn];
int x = 0, y = 0;
void solve() {
for (int i = 0; i < x; i++) {
int cnt = 0;
for (int j = 0; j < y; j++) {
if (!strcmp(morse[i], codes[j])) {
if (!cnt) cout << words[j];
else if (cnt == 1) cout << "!";
else break;
cnt++;
}
}
if (!cnt) {
cnt = maxn; int p;
for (int j = 0; j < y; j++) {
int flag = 0;
int m = strlen(morse[i]), n = strlen(codes[j]);
for (int k = 0; k < min(m, n); k++) {
if (codes[j][k] != morse[i][k]) {
flag = 1;
break;
}
}
if (!flag)
if (abs(m - n) < cnt) {
cnt = abs(m - n);
p = j;
}
}
cout << words[p] << "?";
}
cout << endl;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
while (cin >> a && a != '*') {
cin >> table[(int)a];
}
while (cin >> words[y] && words[y][0] != '*') {
int len = strlen(words[y]);
for (int k = 0; k < len; k++) {
strcat(codes[y], table[(int)words[y][k]]);
}
y++;
}
while (cin >> morse[x] && morse[x][0] != '*') x++;
solve();
return 0;
}