一道奇怪的模拟题。
大意
给定一个 $n\times m$ 的网格,有些格子无法到达。有一个机器人从第一行某处出发,一开始面向正下,目标达到最后一行某处(保证可达),它会重复执行一段由五种语句构成的代码,分别是:
代码格式 | 含义 |
---|---|
FORWARD |
向前一格,如果面前无法到达或为边界则忽略此语句 |
LEFT |
左转 |
RIGHT |
右转 |
GOTO x |
跳转到第 $x$ 行继续进行 |
IF-OPEN x |
如果当前可以进行 FORWARD 操作,则跳转到第 $x$ 行,否则到下一行 |
输入网格,输出行数最少的代码。(多解任意输出)
$n,m\in[1,10]$。
时限 2s。
source: ICPC Asia Regional Contest, Yokohama, 2021–03–17; Problem C
link: http://qoj.ac/contest/802/problem/2265
思路
首先注意到迷宫通解:摸墙。容易写出以下的通解代码:
1 | LEFT |
(注意起点、终点一定在墙边)
考察行数 $\le 4$ 的代码,发现长度为 $4$ 的代码都仅有 $9^4=6561$ 种,非常小。
枚举代码,暴力计算直到重复。单次状态数为 $4\times4\times10\times10=1600$,完全可以接受。
时间复杂度 $\Theta(nm)$。
代码
懒得打 dfs 了,无脑复制粘贴多好(
1 |
|