CF1630D Flipping Range

cxqghzj發表於2024-09-08

題意

給定序列 \(A\),以及下標集合 \(B\),每次操作可以選擇 \(x \in B\),並再 \(A\) 中隨意挑選一個長度為 \(x\) 的子段翻轉正負,求可能的 \(\sum A_i\) 的最大值。

Sol

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

\(s = \gcd(B)\)

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

因此對於 \(s\) 的模數分組,若同一組的負數數量為偶數,則答案為絕對值之和,若為奇數,則為絕對值之和減去絕對值最小的數。

還有一種情況,若第一次操作 \([1, s]\),會翻轉每一組的奇偶,單獨判斷一下即可。

相關文章