Codeforces 1740I - Arranging Crystal Balls

发布时间 2023-05-26 23:28:32作者: tzc_wk

(注:默认下标 1-indexed)

考虑一个数组被清零的充要条件:记 \(b_i=a_{i}-a_{(i+n-2)\bmod n+1}\),那么最终 \(a_i=0\) 当且仅当 \(b_i=0\)\(a_1=0\)

思考一次操作的影响:假设我们对 \([x,x+k-1]\) 这段环上的区间进行了 \(+v\),那么相当于是令 \(b_x\)\(v\)\(b_{x+k}\)\(v\)。同时如果这段区间经过了 \(1\),那么令 \(a_1\)\(v\)。考虑在 \(i\)\((i+k)\bmod n\) 之间连一条边,这样显然图会形成若干个环。每个环是独立的,并且由于我们要让 \(b_i\) 清零,所以钦定了环上一条边进行 \(+1\) 的次数之后,每条边进行 \(+1\) 的次数就确定了,这样总代价可以用 \(\sum \min(c_i,m-c_i)\) 来计算总代价,同时此次操作对 \(a_1\) 的影响也是可以计算的。

这样就有一个很显然的 DP 模型:\(dp_{i,j}\) 表示考虑了前 \(i\) 个环,目前 \(a_1=j\) 的最小代价,由于代价关于我们钦定的那条边的函数实际上是一个分段函数,且每一段都是一个一次函数,因此可以单调队列优化。总复杂度 \(\dfrac{n}{len}·m·len=nm\),其中 \(len\) 是环长。

代码咕了,明天再写。