Loading

AT_arc204_a [ARC204A] Use Udon Coupon

arc 的 A 题也并非简单。

首先注意到操作等价于维护两个指针 \(l, r\),初始 \(l = r = 1\),每次操作可以选择:

  • \(c = \max(0, c - a_r)\),且 \(r = r + 1\)
  • \(c = c + b_l\),且 \(l = l + 1\)

要求在操作过程中任意一步 \(l \le r\)

比较烦躁的是这个 \(\max\) 把原本可以直接计算的性质直接搞没了,从 AT 题角度入手,我们肯定要发现这个操作的性质!

不妨将操作序列刻画一下,就变成了 \(1, 2, 1, 1, 2, ...\) 一堆操作,其中在每个 \(1\) 操作和会有一次 \(\max\) 操作,非常有助于理解的一点是,可以在 \(2\) 操作后同样添加一个 \(\max\) 操作,显然不会改变 \(c\) 的结果。如果有印象回忆起最大子段和的求法,不难发现这个过程本质上是在求最大后缀和,后缀和不好刻画,我们改称全局减去前缀和的形式,取个反,得到本题最重要额的结论(设 \(a_i\) 为第 \(i\) 次操作后 \(1\) 操作的数量,\(b_i\) 为第 \(i\) 次操作后 \(2\) 操作的数量):

\[c = \max_{1 \le i \le 2n} (prea_{a_i} - preb_{b_i}) - ( prea_n - preb_n) \]

得到这个结论,将答案差分一下,设 \(f_{i, j}\) 为做了 \(i\)\(1\) 操作,\(j\)\(2\) 操作的方案数,在转移过程中时刻限制你的 \(lim\) 即可满足 \(\max\) 的性质,代码很好写。

posted @ 2026-01-31 10:03  Alexande  阅读(2)  评论(0)    收藏  举报