P1019这道题我的代码交上去全部数据点都WA掉了。
但是我把测试数据(非全部)下载下来发现我的输出和答案是一样的,并且在其它OJ上也通过了这道题。
比如第一个数据点应当输出15,我的代码的确输出了15,但是检测结果是WA,我直接把输出改成printf("15\n")倒是可以通过第一个数据点。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int n;
string input[20];
int linked[20];
int simulate(const string& pre, const string& last) {
for (int length = 1; length != pre.length(); ++length) {
if (length >= last.length()) return 0;
int i = int(pre.length() - length);
for (int k = 0; k != length; ++k) {
if (pre[i + k] != last[k]) goto hear;
}
return int(last.length() - length);
hear:;
}
return 0;
}
int link(int pre, int plus) {
static int cache[20][20]{};
int& flag = cache[pre][plus];
if (flag == 0) flag = simulate(input[pre], input[plus]) + 1;
return flag - 1;
}
int dfs(int length, int pre) {
int result = length;
for (int i = 0; i != n; ++i) {
if (linked[i] != 2) {
int value = link(pre, i);
if (value == 0) continue;
++linked[i];
result = max(result, dfs(length + value, i));
--linked[i];
}
}
return result;
}
int main() {
cin >> n;
for (int i = 0; i != n; ++i) cin >> input[i];
getchar();
int start = getchar();
int result = 0;
for (int i = 0; i != n; ++i) {
if (input[i][0] == start) {
++linked[i];
result = max(result, dfs(int(input[i].length()), i));
--linked[i];
}
}
printf("%d\n", result);
return 0;
}