1 条题解

  • 0
    @ 2025-8-24 22:47:57

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ix35
    垒球

    搬运于2025-08-24 22:47:57,当前版本为作者最后更新于2023-06-03 23:34:51,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    紫丁香

    先考虑怎么解决一次询问。

    二分答案,现在问题转化为给定一个位的集合 BB,求是否存在一种方式操作完后 BB 中的位全都是 1\texttt 1。将 BB 的限制写成一个由 1,*\texttt{1,*} 组成的串 RR,为 1\texttt 1 的位表示操作完之后要是 11,为 *\texttt * 的位表示对这一位没有限制。

    现在考虑最后一次操作,设这次操作对应的串是 TiT_i,那么:

    • RR 中一个为 *\texttt * 的位,TiT_i 中可以是 0,1,-\texttt{0,1,-} 中的任何一个,因为没有限制。

    • RR 中一个为 1\texttt 1 的位,TiT_i 中只能是 1,-\texttt{1,-},因为否则最后就会是 00

    假设某个 RR 中为 1\texttt 1 的位,在 TiT_i 中也是 1\texttt 1,那么这一位在更之前的操作中就没有限制了(反正最后一步会变成 1\texttt 1),所以我们可以将 RR 的这一位改成 *\texttt *

    于是判定的过程可以看成这样:

    • 每一轮,选出一个满足条件的 TiT_i,然后把 R,TiR,T_i 中都为 1\texttt 1 的位在 RR 中改成 *\texttt *

    • 重复上述过程直到 RR 无法再被更新。

    最终,RR 可能还剩下一些 1\texttt 1,这些 1\texttt 1 无法通过操作产生,我们只需检验初始串 SS 中这些位置是不是都是 1\texttt 1,如果是则说明判定成功,否则判定失败。

    直接这么做复杂度可能是 O(nqm2)O(nqm^2) 的。

    注意到判定过程除了最后一步之外只和 RR 有关,而 RR 只有 2m2^m 种,所以我们不妨对 RR 进行 DP。设 f(R)f(R) 表示 RR 通过上面的更新过程能更新到的 1\texttt 1 的数量最小的串,再设 g(R)g(R) 表示仅从 RR 开始进行一次操作能够变成 *\texttt * 的位的并。

    那么,f(R)=g(R)f(R)=g^{\infty}(R),而 g(R)g(R) 的计算是简单的:比如把操作记在某个对应的 R0R_0 上,然后做个高维前缀或即可。

    预处理 f(R)f(R) 后,我们就可以 O(1)O(1)O(m)O(m) 地进行二分答案中的一次判定。

    总复杂度 O((n+q+2m)×m)O((n+q+2^m)\times m)

    • 1

    信息

    ID
    8549
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者