为什么样例16~20总是TLE?
查看原帖
为什么样例16~20总是TLE?
1356854
DYL2012楼主2025/7/27 20:46

代码如下(经过了deepseek缩时过的代码,赛事没用):

#include <cstdio>
#include <queue>
using namespace std;

const int N = 1001;
int a[N][N], T, n, m, c;
long long k, s, copyuki[N][N];

inline int read() {
    int x = 0, sign = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') sign = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = x * 10 + (ch - '0');
        ch = getchar();
    }
    return x * sign;
}

int main() {
    c = read(), T = read();
    while (T--) {
        n = read(), m = read(), s = read(), k = read();
        for (int i = 0; i < n; ++i)
            for (int j = 0; j < m; ++j)
                a[i][j] = read(), copyuki[i][j] = -1;

        priority_queue<pair<long long, pair<int, int>>> pq;
        // 处理初始位置(第一行的每个格子)
        for (int j = 0; j < m; ++j) {
            long long current = s + a[0][j]; // 初始位置也要变化
            if (current < 0) continue;
            if (current > k) current = k;
            if (current > copyuki[0][j]) {
                copyuki[0][j] = current;
                pq.push({current, {0, j}});
            }
        }

        long long ans = -1;
        int dr[3][2] = {{0, -1}, {0, 1}, {1, 0}};
        while (!pq.empty() && ans < k) {
            auto [mor, p] = pq.top(); pq.pop();
            auto [i, j] = p;
            if (i == n - 1) {
                ans = max(ans, mor);
                continue;
            }
            if (mor < copyuki[i][j]) continue;

            for (int d = 0; d < 3; ++d) {
                int ni = i + dr[d][0], nj = j + dr[d][1];
                if (ni < 0 || ni >= n || nj < 0 || nj >= m) continue;
                long long nm = mor + a[ni][nj];
                if (nm < 0) continue;
                if (nm > k) nm = k;
                if (nm > copyuki[ni][nj]) {
                    copyuki[ni][nj] = nm;
                    pq.push({nm, {ni, nj}});
                }
            }
        }
        printf("%lld\n", ans);
    }
    return 0;
}

保留了AI留下的注释

2025/7/27 20:46
加载中...