P4156 [WC2016] 论战捆竹竿

感觉这个题很难。

先跳过字符串部分。

快进到现在要做同余最短路,且所有物品构成 \(\log\) 段等差数列 \(d + kc, k\in[0,r)\)

这个任意模数并不好做,考虑模数为 \(d\) 的做法,发现可以直接跑多重背包 + 单调队列。

但是这样做模数就在不断变化。考虑如何把模数从 \(x_1\) 变成 \(x_2\)。只需要把所有 \(dis_r\) 拿出来,放到新的 \(dis'\) 上,然后做一次 \(+r\) 的转移即可。

时间复杂度 \(O(n \log n)\)

posted @ 2026-05-15 18:39  _Bonely_Muffin  阅读(9)  评论(0)    收藏  举报