加载中...

ABC 419 E(滑窗同余 + dp)

E

题目要求序列 \(A\) 中每个长度为 \(L\) 的子数组之和均为 \(m\) 的倍数。从这一点可以挖掘出一个重要的数学性质:序列 \(A\) 中任意一对相差距离为 \(L\) 的元素一定与 \(m\) 同余。其证明很简单,关键在于要想到这一点(蒟蒻就因为赛时忽略了这一点导致一直在坐牢qwq...)。于是,我们可以将所有元素划分成 \(L\) 个剩余类,每个剩余类中的所有元素相隔距离均为 \(L\),且开头元素不同。预处理出每个剩余类的总和余 \(m\)\(r\) 的最小总代价。

而原条件等价于:使 sum(a[1~L]) %m = 0, 并且每对相差距离为L的元素均与m同余。于是可以对 \(a\) 的前 \(L\) 个元素 \(dp\)\(dp[i][r]\):使得前 \(i\) 个元素的总和余 \(m\)\(r\),最小总代价(注意,这里的最小总代价是对全部 \(n\) 个元素而言,不要只考虑前 \(i\) 个元素)。状态转移直接枚举当前状态和被转移状态的余数即可。总复杂度 \(O(nm^{2})\),具体细节见代码。

code

posted @ 2025-08-17 14:12  jxs123  阅读(33)  评论(0)    收藏  举报