CF1630D Flipping Range

题意

给定序列 \(A\),以及下标集合 \(B\),每次操作可以选择 \(x \in B\),并再 \(A\) 中随意挑选一个长度为 \(x\) 的子段翻转正负,求可能的 \(\sum A_i\) 的最大值。

Sol

不难注意到所有的操作都能被 \(\gcd(B)\) 来表示。

\(s = \gcd(B)\)

不难注意到一个操作,即是 \([1, s], [2, s + 1]\)

因此对于 \(s\) 的模数分组,若同一组的负数数量为偶数,则答案为绝对值之和,若为奇数,则为绝对值之和减去绝对值最小的数。

还有一种情况,若第一次操作 \([1, s]\),会翻转每一组的奇偶,单独判断一下即可。

posted @ 2024-09-08 10:33  cxqghzj  阅读(5)  评论(0编辑  收藏  举报