BAEKJOON-19523 题解
选自 SDSC2024 Day1 数论选讲。
Descr
给定一个 $h\times w$ 的网格图,从左上角的点 $(0,0)$ 开始,你可以在每个格子选择往下或往右走,走出边界会循环,问哈密顿路径条数。
$h,w \leq 10^6$。
Sol
本题解分步讲解。因为较为抽象,建议读题解同时自己画图理解。
Observation #1
考虑“哈密顿路径”这一条件。
所谓哈密顿路径,就是不重不漏走每个点恰好一次的路径。
假设有一个点 $(x,y)$ 选择了往下走到 $(x+1,y)$,那么因为每个点只能走一次,所以 $(x+1,y-1)$ 就不能选择往右走到 $(x+1,y)$,只能选择往下走。
假设这个点 $(x,y)$ 选择了往右走,那么 $(x+1,y)$ 这个点只能从 $(x+1,y-1)$ 走过来,即从 $(x+1,y-1)$ 向右走,否则没有点能走到这里。
归纳下去,所有的左下-右上的对角线的方向的选择都相同。
再考虑“循环”这一条件。
假设有一个位于底部的点 $(h-1,y)$ 其选择了往下走到 $(0,y)$,那么 $(0,y-1)$ 就不能向右走,否则会重复走到一个点,所以要选择向下走。
假设其选择了向右走,那么因为 $(0,y)$ 位于顶端只能从 $(0,y-1)$ 走过来,那么 $(0,y-1)$ 也必须选择向右走。
剩余的位于顶部、左侧、右侧的情况也有类似规律。
上面所有规律的逆命题也成立。
对这个规律总结归纳,不难发现:
对于一个点 $(x,y)$,对于所有的 $k$,$((x+k)\bmod h,(y-k)\bmod w)$ 与 $(x,y)$ 选择的方向相同。
Observation #2
在上面的结论下,考虑有多少个本质不同的对角线。
假设有一个人,从一个点 $(x,y)$ 沿着对角线,走遍所有的 $k=0,1,2,\cdots$,容易发现他一定会回到 $(x,y)$。由上文的结论得,能使 $(x,y)$ 回到 $(x,y)$ 的 $k$ 一定满足:
$x+k\equiv x(\bmod h),y-k\equiv y(\bmod w)$。
进而可得 $h|k$ 且 $w|k$。
这样的最小的 $k$ 是 $\operatorname{lcm}(h,w)$。即每条对角线长度都为 $\operatorname{lcm}(h,w)$。
考虑一共有 $hw$ 个点,每条对角线有 $\operatorname{lcm}(h,w)$ 个点,那么一共有 $\frac{hw}{\operatorname{lcm}(h,w)}=\gcd(h,w)$ 条对角线。
令 $g=\gcd(h,w)$,也就是说我们只要确定这 $g$ 条对角线的方向就能确定整个方格图的方向。
Hint
正难则反,一共有 $2^g$ 种选择方向的方案,减去不是哈密顿路径的方案即为答案。
Observation #3
考虑一个不合法的方案是什么样的。
因为点数有限,每个点只有一个方向可走任意一个路径的选择,且不管怎么走都走不出这个图。所以从任意一个点出发,必定构成一个环回到这个点。
这个环长度显然最大是 $hw$,若取到 $hw$ 说明正好构成哈密顿路径,小于 $hw$ 则说明不合法。
所以问题转化为统计有多少个路径选择存在一个长度小于 $hw$ 的环。
Observation #4
从一个点向下或向右不重复地走,经过的 $g$ 个点,一定恰好在 $g$ 个不相同的对角线上。
画几个图感性理解一下。
略证:
假设从第一个点 $(x,y)$ 开始走 $k$ 步($k\leq g$)到达了 $(x’,y’)$,且第一次出现 $(x’,y’)$ 与 $(x,y)$ 在同一对角线的情况,则有:
$x+d_x+k’\equiv x’(\bmod h),y+d_y-k’\equiv x’(\bmod w)$
其中 $d_x+d_y=k$。
因为是第一次出现,容易知道 $d_x+k’=d_y-k’=\operatorname{lcm}(h,w)=\frac{hw}{g}$,两式相加进而有 $d_x+d_y=\frac{2hw}{g}=k\leq g$。
得 $2hw\leq g^2$,显然不成立,得证。
最终章
上面的结论启示我们不要去关心这 $g$ 个对角线具体是怎么走的,转而去考虑这些总共产生的影响。
不妨假设在这 $g$ 条对角线中有 $k$ 条往右走,剩下 $g-k$ 条往下走,则每走 $x$ 轮最终产生的移动影响是 $(x(g-k),xk)$。
因为总是要回到原点,所以有 $h|x(g-k)$ 和 $w|xk$。
根据上面的 Observation #4,我们知道从一个点走到这个点一定经历了整数轮对角线。如果 $x<\frac{hw}{g}$,那么说明存在长度小于 $hw$ 的环。
现在考虑枚举 $k$,计算哪些 $k$ 不符合哈密顿路径。
不难发现只要找到最小的 $x$ 满足 $h|x(g-k)$ 且 $w|xk$ 再判断这个 $x$ 是否小于 $\frac{hw}{g}$ 即可。
若 $w|xk$,两边同除 $\gcd(w,k)$ 则有 $\frac{w}{\gcd(w,k)}|x\frac{k}{\gcd(w,k)}$。此时 $\frac{w}{\gcd(w,k)}$ 与 $\frac{k}{\gcd(w,k)}$ 互质,则有 $\frac{w}{\gcd(w,k)}|x$,同理有 $\frac{h}{\gcd(h,g-k)}|x$。
所以最小的 $x=\operatorname{lcm}(\frac{w}{\gcd(w,k)},\frac{h}{\gcd(h,g-k)})$。