P1019的评测机是否存在问题?
  • 板块工单反馈版
  • 楼主kmedsVM
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/1/31 22:11
  • 上次更新2023/10/28 09:56:30
查看原帖
P1019的评测机是否存在问题?
648328
kmedsVM楼主2022/1/31 22:11

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;
}

2022/1/31 22:11
加载中...