1 条题解
-
0
「COCI 2021.1 Hop」题解 题目大意 给定一个严格递增的正整数序列 ,表示 片荷叶上的数字。
我们要将每对荷叶 (其中 )标记为 1、2、3 中的一种颜色(代表三只青蛙)。
青蛙只能从 跳到 ()当且仅当:
边 标记为该青蛙的颜色;
(即 整除 )。
要求:没有青蛙能连续跳超过 3 次(即路径长度 ≤ 4 个节点,3 条边)。
条件转化 我们构造一个有向图: 当 且 时,存在一条从 到 的有向边。
然后我们要给这个 DAG 的边进行 3-染色(实际上是完全图的边都要染色,但青蛙只走整除的边),使得在每个颜色的子图中,最长路径长度 ≤ 3。
关键观察 整除关系是传递的:如果 且 ,则 。 所以如果颜色相同,就可能形成长链。
目标:破坏长链,通过合理分配颜色,使得同色路径长度 ≤ 3。
一种常见思路:按某种规则循环染色,比如根据 的 2 的幂次或其他数论性质分组。
解法思路(官方解法简述) 已知 COCI 官方解法是:
将 写成 ,其中 是奇数。
所有 相同的数构成一个"奇数族"。
在同一个奇数族内,按 的大小排序,它们之间是整除关系(因为 相同,整除性由 2 的幂次决定)。
不同奇数族之间没有整除关系(因为 互质)。
染色策略(举例):
对每个奇数族内部,按 从小到大排列,然后循环使用颜色 1, 2, 3 给族内相邻节点之间的边染色。
不同奇数族之间的边可以任意分配颜色(因为它们没有整除关系,不会形成跨族的长路径)。
这样,同色路径长度 ≤ 3 的原因是:在同一个奇数族内,2 的幂次每次至少增加 1,而颜色循环会打断长链。
构造方法 更具体的构造:
对每个 ,计算 (即去掉因子 2 后的奇数部分)。
将下标按 分组,每组内按 大小(即 大小)排序。
对于任意 :
如果 ,则 (严格递增保证),所以这条边不会出现在整除 DAG 中,可以任意染色(比如循环 1,2,3)。
如果 ,则 当且仅当 ,并且由于严格递增,。我们在这条边上染色 或类似循环规则。
这样,在同一个奇数族内,沿着同色边跳,每次 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
- 上传者