求调样例&悬关&按照官方题解写的
查看原帖
求调样例&悬关&按照官方题解写的
637788
kimi0705楼主2024/3/23 23:53
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, k, ans, now;
int arr[N];
int main() {
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; i++) scanf("%d", arr + i);
    for (int i = 1; i <= (n + k - 1) / k; i++) 
        now += arr[min(i * k, n)] - arr[1];
    ans = now;
    for (int i = 2; i <= n; i++) {
        int l = (i - 1) / k; // 不包括他自己
        int r = (n + k - 1) / k - l;
        int pos = (i + k - 1) / k;
        now += (l - r + 1) * (arr[i] - arr[i - 1]);
        if (i % k == 1) 
            now -= arr[i - 1] - arr[i - k - 1], now += arr[i + k] - arr[i];
        ans = min(ans, now);
    }
    cout << ans * 2;
    return 0;
}
2024/3/23 23:53
加载中...