1 条题解

  • 0
    @ 2025-8-24 22:38:24

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar zhoukangyang
    ^w^/

    搬运于2025-08-24 22:38:24,当前版本为作者最后更新于2023-09-26 09:47:54,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    cnblogs

    本来想加强一下放 noip 模拟赛的,后来发现 loj 上已经有这种做法了,十分遗憾。

    首先这题等价于对于 BB 找到最小的满足条件的 nn。因为可以在最优解里面插一堆 B1B-1

    这个 nn 不会很大,因此一个比较暴力的想法是暴力枚举对应关系的排列和进位。

    考虑把排列的环抠出来。不妨是 p1p2...pk(pk+1=p1)p_1 \to p_2 \to ... \to p_k \to (p_{k+1}=p_1)(这里的 pp 表示排列对应位置上的值)。

    不妨 cic_i 是第 pip_i 位得到的进位数量,那么 2pi+cipi+1(modB)2p_i+c_i \equiv p_{i+1} \pmod B

    所以就有 $2^k p_1 + \sum_{j=1}^{k} 2^{k-j} c_j \equiv p_1 \pmod B$。

    C=j=1k2kjcjC = \sum_{j=1}^{k} 2^{k-j} c_j,显然 0C<2k0 \le C < 2^k

    不妨设 (2k1)p1+C=tB(2^k-1)p_1 + C = tB,可以发现 0t2k0 \le t \le 2^k

    而有了 tt 之后,由于 C2k1C \le 2^{k}-1,所以 (p1,C)(p_1,C) 只有 Θ(1)\Theta(1) 种方案。

    然后我们就可以算出来每个位置被前面的那个位置进了多少位,向后面的那个位置进了多少位。

    而最后的那个数就是 一条在 0,10,1 两个点的图上的欧拉回路。这就要求了 010 \to 1101 \to 0 的边数相同。

    我们抠出来的环的 010 \to 1101 \to 0 的边数不一定相同,所以可能要选多个环。这个可以背包解决。

    kk 是答案,时间复杂度 Θ(k2k)\Theta(k2^k)aclink

    • 1

    信息

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