QOJ.ac

QOJ

حد الوقت: 2.0 s حد الذاكرة: 512 MB مجموع النقاط: 100 قابلة للهجوم ✓

#17733. トロミノ詰め込み

الإحصائيات

Busy Beaver は奇妙なパズルを見つけました。このパズルは、$N \times M$ のマス目に分割された箱で構成されています。グリッドの各セルは、占有されている('#' で表される)、空である('.' で表される)、または空だが 'o' でマークされている、のいずれかです。

このパズルには、グリッドの各 'o' セルに対して1つずつ、L-トロミノのピースが付属しています。L-トロミノは、図のように L 字型に並んだ3つの正方形ブロックで構成されています。L-トロミノの中心とは、他の2つの正方形の両方に隣接している正方形のことです(図では 'o' でマークされています)。

Busy Beaver は、パズルを解くためには、すべての L-トロミノを箱の中に詰め込む必要があることに気づきました。その際、L-トロミノはグリッドに合わせて配置し、各 L-トロミノの中心は 'o' でマークされた空のセルになければならず、どの2つの L-トロミノも互いに重なったり、占有されたセルと重なったりしてはいけません。すべての L-トロミノは自由に回転させることができます。

Busy Beaver がパズルを解く方法の数を数えるのを手伝ってください。答えは大きくなる可能性があるため、$10^9 + 7$ で割った余りを出力してください。

入力

各テストケースには複数のテストケースが含まれます。最初の行にはテストケースの数 $T$ ($1 \le T \le 500$) が含まれます。続いて各テストケースの説明が続きます。

各テストケースの最初の行には、グリッドの次元を表す2つの整数 $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)$ が異なる2つの 'o' セルである場合、$|r_1 - r_2| + |c_1 - c_2| \ge 3$ です。
  • (30点) 各 'o' セルは、少なくとも1つの他の 'o' セルまたは '#' セルと垂直に隣接しています。つまり、任意の 'o' セル $(r, c)$ に対して、$(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

注記

最初のテストケースは最初の小課題の制約を満たし、2番目のテストケースは2番目の小課題の制約を満たしています。

最初のテストケースにおけるパズルを解く4通りの方法は以下の通りです:

2番目のテストケースにおけるパズルを解く6通りの方法は以下の通りです:

3番目のテストケースにおけるパズルを解く唯一の方法は以下の通りです:

4番目のテストケースでは、パズルを解く方法はありません。

5番目のテストケースでは 'o' セルが存在しないため、パズルを解く唯一の方法は L-トロミノを一切配置しないことです。

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.