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

typedef long long ll;

ll makeSubKSumEqual(vector& arr, int k) { int n = arr.size(); vector prefixSum(n + 1, 0); for (int i = 0; i < n; i++) { prefixSum[i + 1] = prefixSum[i] + arr[i]; } ll ans = LLONG_MAX; for (int i = 0; i < k; i++) { ll sum = 0; for (int j = i; j < n; j += k) { sum += arr[j]; } for (int j = 0; j < k; j++) { ll target = sum - (ll)j * (n + k) / k; ll curAns = 0; for (int l = j; l < n; l += k) { curAns += abs(target - prefixSum[l + 1] + prefixSum[j]); } ans = min(ans, curAns); } } return ans; }

int main() { int n, k; cin >> n >> k; vector arr(n); for (int i = 0; i < n; i++) { cin >> arr[i]; } cout << makeSubKSumEqual(arr, k) << endl; return 0; }

Make K-Subarray Sums EqualYou are given a 0-indexed integer array arr and an integer k The array arr is circular In other words the first element of the array is the next element of the last element a

原文地址: https://www.cveoy.top/t/topic/bcyY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录