专栏文章

CF2089B1 题解

CF2089B1题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miptpk28
此快照首次捕获于
2025/12/03 17:47
3 个月前
此快照最后确认于
2025/12/03 17:47
3 个月前
查看原文
先简单说一下题意,给定长度为 nn 的序列 aabb,一次操作可以让两个序列中的对应位置减去二者较小值(即 aiaimin{ai,bi}a_i \gets a_i - \min\{a_i,b_i\}bib_i 同理),然后将 aa 整体循环向右移一位(最后一个数放到序列开头)。问最早多少次操作后 aa 中所有数会变为 00,保证 a<b\sum a < \sum b,即答案在有限次操作内。
先手动模拟观察性质。对于 ala_{l}ara_r,令 s1=i=lrais_1 = \sum\limits_{i=l}^r a_is2=i=lrbis_2 = \sum\limits_{i=l}^r b_i,不难发现在 rl+1r-l+1 次操作之后,一定有 s1s1min{s1,s2}s_1 \gets s_1 - \min\{s_1,s_2\}s2s2min{s1,s2}s_2 \gets s_2 - \min\{s_1,s_2\}。如果有 s1s2s_1 \le s_2,那么在 rl+1r-l+1 次操作后 s1s_1 的值一定为 00。换而言之,ala_lara_r 均变为了 00
所以说对于 aia_i,令它最早归 00 的时刻为 tt,那么一定有 aia_iai+t1a_{i+t-1} 这一段数的和小于等于 bib_ibi+t1b_{i+t-1} 的和(为方便表示,此处并不严谨,假设下标从 00 开始,如果下标 xnx \ge n,则应有 xxmodnx \gets x \bmod n)。
此时我们只需要对于每一个 aia_i 求出它的最早归 00 时刻 tt,再将所有 tt 取最大值即为答案。这一过程可以用单调栈维护。实现细节参见提交记录

评论

0 条评论,欢迎与作者交流。

正在加载评论...