QOJ.ac

QOJ

Límite de tiempo: 2.0 s Límite de memoria: 512 MB Puntuación total: 100 Hackeable ✓

#17733. Tromino 铺设

Estadísticas

Busy Beaver 发现了一个奇怪的谜题。谜题由一个划分为 $N \times M$ 网格的盒子组成。网格中的每个单元格要么是被占用的(用 '#' 表示),要么是空的(用 '.' 表示),或者是空的但标记为 'o'。

谜题附带了一堆 L-tromino 拼图块,网格中每个 'o' 单元格对应一个。L-tromino 由三个正方形块组成,形状呈 L 型,如图所示。L-tromino 的中心是与另外两个正方形都相邻的那个方块(在图中标记为 o)。

Busy Beaver 意识到,要解决这个谜题,他需要将所有的 L-tromino 放入盒子中,使得 L-tromino 与网格对齐,每个 L-tromino 的中心位于标记为 'o' 的空单元格上,且没有两个 L-tromino 相互重叠,也没有 L-tromino 与被占用的单元格重叠。所有的 L-tromino 都可以自由旋转。

你能帮助 Busy Beaver 计算出解决该谜题的方法数吗?由于答案可能很大,请输出其对 $10^9 + 7$ 取模的结果。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 $T$ ($1 \le T \le 500$)。接下来是各测试用例的描述。

每个测试用例的第一行包含两个整数 $N$ 和 $M$ ($2 \le N, M \le 1000$),表示网格的尺寸。

接下来的 $N$ 行,每行包含 $M$ 个字符,描述网格的一行。每个字符要么是 '#','.',要么是 'o'。

保证所有测试用例的 $N$ 之和不超过 1000。 保证所有测试用例的 $M$ 之和不超过 1000。

输出格式

对于每个测试用例,输出一个整数:解决该谜题的方法数,对 $10^9 + 7$ 取模。

子任务

令 $(r, c)$ 表示第 $r$ 行第 $c$ 列的单元格 ($1 \le r \le N, 1 \le c \le M$)。

  • (10 分) 每个 'o' 单元格与其他 'o' 单元格的曼哈顿距离至少为 3。即,如果 $(r_1, c_1)$ 和 $(r_2, c_2)$ 是两个不同的 'o' 单元格,则 $|r_1 - r_2| + |c_1 - c_2| \ge 3$。
  • (30 分) 每个 'o' 单元格在垂直方向上至少与另一个 'o' 或 '#' 单元格相邻。即,对于任何位于 $(r, c)$ 的 'o' 单元格,$(r - 1, c)$ 或 $(r + 1, c)$ 必须是 '#' 单元格或另一个 'o' 单元格。
  • (60 分) 无额外限制。

样例

输入 1

5
4 5
###.o
.o...
#..o.
#..##
5 5
..###
.o..#
.o.o.
..#o.
###..
8 31
.########.#..oo..o..o#o..o....o
o.######.o#o...o..o..#..o..oo..
o..####.o.#####..########o..###
..o.o..o..#####.o########..o###
.o##..##.o#####o.########..o###
o.##.o##.o#####..########o..###
..######..#..o..o.o..####..o###
.o######o.#o..o..o..o####o..###
2 3
#.o
.o.
2 2
..
..

输出 1

4
6
1
0
1

说明

注意,第一个测试用例满足第一个子任务的约束,第二个测试用例满足第二个子任务的约束。

在第一个测试用例中,解决谜题的 4 种方法如图所示:

在第二个测试用例中,解决谜题的 6 种方法如图所示:

在第三个测试用例中,解决谜题的唯一方法如图所示:

在第四个测试用例中,没有解决谜题的方法。

在第五个测试用例中,没有 'o' 单元格,因此解决谜题的唯一方法是不放置任何 L-tromino。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.