题解:CF1733A Consecutive Sum

· · 题解

思路:

给定一个长度为 n 的数组 a,你可以进行最多 k 次下面的操作。选择两个下标使得 i \bmod k = j \bmod k ( 1 \le i,j \le n) 我们就交换 a_ia_j。在进行完你的操作之后,你需要在数组中选择一段长度为 k 的区间,此区间的各个元素的和即为你的分数,请求出你能得到的最大分数。

核心代码:

for(int i=1;i<=n;i++){
     cin>>b[i];
     a[i%k]=max(a[i%k],b[i]);//计算
}
long long ans=0;
for(int i=0;i<k;i++){
     ans+=a[i];//累和求答案
}