求助 Hack
查看原帖
求助 Hack
322620
Nygglatho楼主2022/4/13 06:50

如题,我的思路是把前缀和数组 pp 填满,最后输出 aia_i 时输出 pipi1p_i - p_{i-1}

代码:

#include <bits/stdc++.h>
using namespace std;

int a[888888], nxt = 1;

int main() {
    int T; scanf ("%d", &T);
    while(T--) {
		bool flg = false;
        int n;
        scanf ("%d", &n);
        for (int i = 1; i <= n; ++i) scanf ("%d", &a[i]);
        for (int i = 1; i <= n; ++i) {
			if (nxt < i) nxt = i;//下一个为 1 的数
			if (a[i] != -1) nxt = i;
			while (a[nxt] == -1) ++nxt;
			if (nxt > n) flg = true;
			// cout << a[i] << ' ' << nxt << ' ' <<i <<endl;
			if (!flg && a[i] == -1) a[i] = a[i - 1] + (a[nxt] - a[i - 1]) / (nxt - i + 1);
            else if (flg) a[i] = a[i - 1] + 1;
		}
        for (int i = 1; i <= n; ++i)
            printf ("%d ", a[i] - a[i - 1]);
        puts("");
    }
}
2022/4/13 06:50
加载中...