有谁恩帮我解释一下我的代码吗?/bx
查看原帖
有谁恩帮我解释一下我的代码吗?/bx
1023732
FlowerAccepted楼主2025/1/27 18:52

赛场上写的代码,自己都忘了是怎么想出来的了。如有大佬帮我指点一下万分感谢/bx

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int a[500005], diff[500005], sum[500005];

void dfs(int x, int n) {
    if (x == 1) {
        diff[x + 1] += min(a[x], n - x) + 1;
        diff[x + min(a[x], n - x) + 1] --;
        diff[x] -= min(a[x], n - x);
        sum[x] = a[x] = diff[x];
        return;
    }
    dfs(x - 1, n);
    a[x] = sum[x - 1] + diff[x];
    diff[x + 1] += min(a[x], n - x) + 1;
    diff[x + min(a[x], n - x) + 1] --;
    diff[x] -= min(a[x], n - x);
    sum[x] = sum[x - 1] + diff[x];
}

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i ++) {
        cin >> a[i];
        diff[i] = a[i] - a[i - 1];
    }
    dfs(n, n);
    for (int i = 1; i <= n; i ++) {
        cout << sum[i] << ' ';
    }
    return 0;
}


2025/1/27 18:52
加载中...