「JSOI2018」机器人
在本题当中为了方便,我们将坐标范围改至 ,行走即可视作任意一维在模意义下 .
同时,注意到一个位置只能经过一次,则可以令 为 这个位置往外走是向下还是向,方便考察。
首先考虑这个问题的方案数,此类网格图行走的问题一般需要考察对角线的特殊性质。
-
观察 1:,若 ,则要么 被经过了两次,要么没有被经过。
-
推论 1:
考察推论 1 的组合表示,相当于将整个网格图分为了若干个组,每个组由若干条完整的副对角线构成,每组内 相同,很自然地我们可以进一步考虑每个组对角线的构成。
将网格图往左右不断复制延伸,考察一下此时 所在组内副对角线的在第一行的开头位置构成的集合。
不难发现即为 ,对应到原网格图内就是 的值。
根据裴蜀定理,这个值一定是 ,因此可以知道 所在组的对角线集合就是从 开始每 个间距分布的对角线。
推广到所有组,发现第 组就是 .
因此这个问题只需要确定 这 条对角线上是如何走的即可确定全图是怎么走的,也即确定前 步是怎么走的。
考虑前 步怎么走是合法的,当且仅当第一次遇到走过的点在恰好走了 步以后。
首先我们发现:对于某条对角线上的点 一定要恰好走 步以后才能再次回到这条对角线,在此期间,一定走了若干次完整的周期,则:
-
观察 2:第一次走到一个重复点时一定恰好走完了若干个整周期。
-
观察 3:同一周期内,决定第一次走到重复点时刻的与周期内走的顺序无关,只与周期内往下 / 往右走的次数有关。
假设一个周期内往下走了 步,则根据裴蜀定理,在第一维走回来需要 步,第二维类似地需要 步,因此第一次走回来的时刻为:,我们需要满足:
对此,我们考察 所包含的每个质因子 ,令
- 若 .
若 则 ,可知等式左侧一定比右侧少了至少一个因子 ,故 ,同理 .
- 若
则 ,若 则 故左侧两项均除去了至少一个 ,一定比右式至少少了一个 .
同理可得
综上, 总有 故有上式成立的必要条件
而这显然也是充分条件,因此所有的方案数即:,考虑回到原问题。
首先枚举合法的 ,对于每个 ,其如果在第一周期走的路径内那么所有周期当中第 步的位置都将随之确定,因此也可以确定这些位置当中最靠前的障碍的位置是在第几步,记作 .
于是有一个简单 ,记 为第一周期当中,确定了前 步的走法,第 步在 当前走到的所有位置中 的最小值为 的方案,转移显然,复杂度 .
通过一定的常数优化已经可以通过了,但本题存在更优的解法。
既然是周期性移动,那么自然可以将碰到障碍的步数分解为:第几周期 + 第一周期内的第几步。
枚举最终碰到障碍步数在第 周期,求出 考虑完第一周期的前 步,第 步在 ,走到的每一个位置的 都至少在在第 周期之后的方案,以及 为确定了第 步(走到 )第 前位置为 ,路径上的每个位置的 至少在第 周期之后的方案。
枚举在哪个位置第一次碰到障碍,利用 合并即可,复杂度 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现