神仙构造题不是人能场上做出来的……
题意简述
一个四联通的 $n\times m$ 的迷宫,相邻的两个位置之间可能有墙阻隔使得这两个位置不能直接互达,一共有 $k$ 堵墙。从 $(1,1)$ 进入迷宫,而出口是 $(n,m)$ ,假设现在在 $(x,y)$ ,下一步只能走到 $(x + 1,y)$ 或 $(x,y + 1)$ ,当然不能走出迷宫且下一步走到的位置和现在位置之间不能有墙。通过一些计算,得出从入口 $(1,1)$ 走到 $(n,m)$ 共有 $T$ 种走法。
现在给出 $T$ , $1\le T\le 10^{18}$ ,希望你构造出一个迷宫,使得从入口 $(1,1)$ 走到 $(n,m)$ 共有 $T$ 中走法,限制 $1\le n,m\le 50, 0\le k\le 300$ 。
主要思路
考虑在 $(x,y)$ 时答案是 $T$ 。发现可以简单地在 $(x+1,y+1)$ 获得 $2T$ 。
如何将 $T$ 变为 $2T + 1$ ?考虑将上方开一小口,将一个 $1$ 引入。
如何保证引入的是 $1$ ?
发现只需要保证红圈位置的为 $1$ 即可,所以可以在外面建墙。
那么初始的状态如何生成呢?如图,左上角为 $(1,1)$ 。
这样,可以将 $T$ 转换成二进制数,就可以得到 $T < 2^{50}$ 的做法了。
然而题目要求做到 $T \le 10^{18}$ ,如何解决?
发现可以在 $(x+2,y+2)$ 获得 $6T$ ,而 $6 > 2^2$ ,看起来就可以将 $n,m$ 卡进 $50$ 以内。
但是我们同时要便于获得 $6T + i$ ( $1\le i \le 5$ )。
发现在引入 $1$ 的情况下,若不建图中的蓝墙,不建一堵墙会增加 $3$ 种方案;不建图中的红墙,不建一堵墙会增加 $1$ 种方案。如此就可以将 $T$ 转换成六进制做了。
同时为了保证引入的是 $1$ ,可以如图所示在外围建墙。此时,计算最大的 $n,m,k$ ,发现都可以卡进限制范围内。
初始状态同二进制做法。
参考代码
1 |
|
其他解法
如图,可以将 $T$ 转化为三进制做,一位是几就把那一位对应的几面墙打开,外面的墙是用于将答案引至最终点的。
据说这样更好写?