#P11906. [NHSPC 2023] E. 迷宮鑰匙圈

    ID: 13296 远端评测题 1000ms 1024MiB 尝试: 0 已通过: 0 显示难度提高 上传者: 标签>2023O2优化广度优先搜索 BFS台湾

[NHSPC 2023] E. 迷宮鑰匙圈

题目描述

小咪到夜市玩游戏,赢得了一副钥匙圈。这副钥匙圈上有个迷宫面板,里面有许多小钢珠:

将钥匙圈的面板向左或向右旋转 9090 度,可以使每颗仍在迷宫内的小钢珠向下掉落,直到该小钢珠掉出迷宫,碰到迷宫挡板,或碰到其他仍在迷宫内的小钢珠为止。更明确地说,这座迷宫可以用 N×MN\times M 的二维矩阵表示,一次的 9090 度旋转会将迷宫变换为 M×NM\times N 的二维矩阵,其中

  • 一次 9090 度左旋转会将位置 (i,j)(i, j) 变换为位置 (M−j+1,i)(M-j+1, i)。
  • 一次 9090 度右旋转会将位置 (i,j)(i, j) 变换为位置 (j,N−i+1)(j, N-i+1)。

此外,若旋转后位置 (i,j)(i, j) 有一颗小钢珠,则

  • 若存在某个 i′>ii' > i 满足 (i′,j)(i', j) 为迷宫挡板,则
    1. 设最小的 i′i' 为 i∗i^*。
    2. 若 (i,j),(i+1,j),…,(i∗−1,j)(i, j), (i+1, j), \ldots, (i^*-1, j) 间恰好有 kk 颗小钢珠,则原位置 (i,j)(i, j) 的小钢珠会掉到位置 (i∗−k,j)(i^*-k, j)。
  • 否则,该小钢珠将掉出迷宫。

给定迷宫与小钢珠的初始位置,请算出至少需要向左或向右旋转 9090 度几次,才能使每颗小钢珠都掉出迷宫。

以下是一个迷宫大小为 10×710\times7 的例子:

输入格式

nn mm
s1,1s_{1, 1} s1,2s_{1, 2} …\ldots s1,ms_{1, m}
s2,1s_{2, 1} s2,2s_{2, 2} …\ldots s2,ms_{2, m}
⋮\vdots
sn,1s_{n, 1} sn,2s_{n, 2} …\ldots sn,ms_{n, m}

  • nn 代表迷宫的行数。
  • mm 代表迷宫的列数。
  • si,js_{i, j} 代表位置 (i,j)(i, j) 的状态,以字符 b、s、w 表示,其中
    1. b 代表该格为空且有小钢珠。
    2. s 代表该格为空且没有小钢珠。
    3. w 代表该格为迷宫挡板。

输出格式

如果存在使每颗小钢珠都掉出迷宫的旋转方式,请输出

ans\textrm{ans}

其中 ans\textrm{ans} 为一个整数,代表所需的旋转次数。否则,输出

−1-1

10 7
w w w w w w w
w s s s s s w
w s s s s s w
w s w w w s w
w s s s w s w
w s b b w s w
w w w w w s w
s s s s s s w
s s s s s s w
w w w w w w w
7
5 3
s w s
s s s
w b w
w b w
s w s
5
5 3
s w s
w s w
s b s
w b w
s w s
-1

提示

测试数据限制

  • 1≤n≤151 \le n \le 15。
  • 1≤m≤151 \le m \le 15。
  • 对任意 i∈{1,2,…,n}i \in \{1, 2, \ldots, n\} 与 j∈{1,2,…,m}j \in \{1, 2, \ldots, m\},si,js_{i, j} 只能是 b、s、或 w。
  • 满足 si,js_{i, j} 为 b 的 (i,j)(i, j) 对数介于 11 与 33 之间。
  • 给定的迷宫保证不会有不稳定的状况,即若 si,js_{i, j} 为 b,则必定存在某个 i∗>ii^* > i 满足
    1. si∗,js_{i^*, j} 为 w。
    2. si,j,si+1,j,…,si∗−1,js_{i, j}, s_{i+1, j}, \ldots, s_{i^*-1, j} 均为 b。
  • nn 与 mm 皆为整数。

评分说明

本题共有三组子任务,条件限制如下所示。 每一组可有一或多个测试数据,该组所有测试数据皆需答对才可获得该组分数。

子任务 分数 额外输入限制
1 3737 迷宫里的小钢珠数量为 11
2 2929 迷宫里的小钢珠数量不超过 22
3 3434 无额外限制