#include<bits/stdc++.h> usingnamespace std; //"O campeão tem nome, e se chama Charles Oliveira!" #define int long long #define endl '\n' #define ep emplace #define pob #define ll long long #define pb push_back #define pof pop_front #define pob pop_back #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define mod 998244353 #define MOD 1000000007 constint N=200005;
using ld = longdouble; using ui = unsigned; using ull = unsignedlonglong; using i128 = __int128;
//所有i+x对2w取模之后小于w的i的代价都会被加起来 //假设有一个周长为2w的圆, //假设w等于2 //假设原来的下标是1 2 3 4 5 6 //当x=0时,那么就是i%4时,余数为0和1的被选取 0 1 2 3 是 是 否 否 //当x=1时,那么就是i%4时,余数为3和0的被取走 0 1 2 3 是 否 否 是 //当x=2时,那么就是i%4时,余数为2和3的被取走 0 1 2 3 否 否 是 是 //这个x在这里的作用 其实就是在2w周长的这个圆上,取一段连续的x长度的和,再给它加起来 voidsolve(){ int N, W; cin>>N>>W; // 周期为 2W,统计每个余数对应的总成本 int period = 2 * W; vector<longlong> S(period, 0); for (int i = 1; i <= N; ++i) { longlong cost; cin >> cost; // i % period 得到该位置在周期内的偏移量 S[i % period] += cost; } // 寻找环形数组中长度为 W 的连续子段最小和 // 使用滑动窗口。为了处理环形,我们可以将数组逻辑上扩展(或者用取模) longlong current_window_sum = 0; // 初始窗口 [0, W-1] for (int i = 0; i < W; ++i) { current_window_sum += S[i]; }