1 条题解

  • 0
    @ 2025-10-30 15:35:17

    「COCI 2021.1 Hop」题解 题目大意 给定一个严格递增的正整数序列 x1,x2,,xnx_1, x_2, \dots, x_n,表示 nn 片荷叶上的数字。

    我们要将每对荷叶 (a,b)(a, b)(其中 a<ba < b)标记为 1、2、3 中的一种颜色(代表三只青蛙)。

    青蛙只能从 ii 跳到 jjj>ij > i)当且仅当:

    (i,j)(i, j) 标记为该青蛙的颜色;

    xixjx_i \mid x_j(即 xix_i 整除 xjx_j)。

    要求:没有青蛙能连续跳超过 3 次(即路径长度 ≤ 4 个节点,3 条边)。

    条件转化 我们构造一个有向图: 当 xixjx_i \mid x_ji<ji < j 时,存在一条从 iijj 的有向边。

    然后我们要给这个 DAG 的边进行 3-染色(实际上是完全图的边都要染色,但青蛙只走整除的边),使得在每个颜色的子图中,最长路径长度 ≤ 3。

    关键观察 整除关系是传递的:如果 xaxbx_a \mid x_bxbxcx_b \mid x_c,则 xaxcx_a \mid x_c。 所以如果颜色相同,就可能形成长链。

    目标:破坏长链,通过合理分配颜色,使得同色路径长度 ≤ 3。

    一种常见思路:按某种规则循环染色,比如根据 xix_i 的 2 的幂次或其他数论性质分组。

    解法思路(官方解法简述) 已知 COCI 官方解法是:

    xix_i 写成 xi=2kimix_i = 2^{k_i} \cdot m_i,其中 mim_i 是奇数。

    所有 mim_i 相同的数构成一个"奇数族"。

    在同一个奇数族内,按 kik_i 的大小排序,它们之间是整除关系(因为 mm 相同,整除性由 2 的幂次决定)。

    不同奇数族之间没有整除关系(因为 mm 互质)。

    染色策略(举例):

    对每个奇数族内部,按 kik_i 从小到大排列,然后循环使用颜色 1, 2, 3 给族内相邻节点之间的边染色。

    不同奇数族之间的边可以任意分配颜色(因为它们没有整除关系,不会形成跨族的长路径)。

    这样,同色路径长度 ≤ 3 的原因是:在同一个奇数族内,2 的幂次每次至少增加 1,而颜色循环会打断长链。

    构造方法 更具体的构造:

    对每个 ii,计算 mi=xi/2v2(xi)m_i = x_i / 2^{v_2(x_i)}(即去掉因子 2 后的奇数部分)。

    将下标按 mim_i 分组,每组内按 xix_i 大小(即 kik_i 大小)排序。

    对于任意 i<ji < j

    如果 mimjm_i \neq m_j,则 xixjx_i \nmid x_j(严格递增保证),所以这条边不会出现在整除 DAG 中,可以任意染色(比如循环 1,2,3)。

    如果 mi=mjm_i = m_j,则 xixjx_i \mid x_j 当且仅当 kikjk_i \le k_j,并且由于严格递增,ki<kjk_i < k_j。我们在这条边上染色 (kjki)mod3+1(k_j - k_i) \bmod 3 + 1 或类似循环规则。

    这样,在同一个奇数族内,沿着同色边跳,每次 2 的幂次差 mod 3 固定,所以最多 3 步就会因为颜色不匹配而停止。

    示例验证 样例 1:

    text n = 8 x = 3, 4, 6, 9, 12, 18, 36, 72 分解:

    3 = 2^0 * 3

    4 = 2^2 * 1

    6 = 2^1 * 3

    9 = 2^0 * 9

    12 = 2^2 * 3

    18 = 2^1 * 9

    36 = 2^2 * 9

    72 = 2^3 * 9

    奇数族分组:

    m=3: [3(2^0), 6(2^1), 12(2^2)]

    m=1: [4(2^2)]

    m=9: [9(2^0), 18(2^1), 36(2^2), 72(2^3)]

    实际上官方输出是:

    text 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 符合要求。

    总结 本题核心是利用数论分解 + 循环染色,破坏整除链的长度。 通过将数按奇数部分分组,在组内按 2 的幂次排序并循环染色,可以保证同色路径长度 ≤ 3。 不同组之间的边不会产生整除关系,可以任意染色。

    • 1

    信息

    ID
    4768
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    5
    已通过
    1
    上传者