QOJ.ac

QOJ

时间限制: 2.0 s 内存限制: 512 MB 总分: 100 可 Hack ✓

#17733. Tromino Packing

统计

Busy Beaver a trouvé un puzzle étrange. Le puzzle consiste en une boîte divisée en une grille de $N \times M$ carrés. Chaque cellule de la grille est soit occupée (notée par un « # »), vide (notée par un « . »), soit vide mais marquée par un « o ».

Le puzzle est fourni avec un ensemble de pièces en forme de L-tromino, une pour chaque cellule « o » de la grille. Un L-tromino est composé de trois blocs carrés en forme de L, comme illustré. Le centre du L-tromino est le carré qui est adjacent aux deux autres carrés (marqué par un o sur l'image).

Busy Beaver réalise que pour résoudre le puzzle, il doit placer tous les L-trominos dans la boîte de telle sorte que les L-trominos soient alignés avec la grille, que chaque centre de L-tromino soit sur une cellule vide marquée par un « o », et qu'aucun L-tromino ne chevauche un autre ou une cellule occupée. Tous les L-trominos peuvent être tournés librement.

Pouvez-vous aider Busy Beaver à compter le nombre de façons de résoudre le puzzle ? Comme la réponse peut être grande, donnez-la modulo $10^9 + 7$.

Entrée

Chaque test contient plusieurs cas de test. La première ligne contient le nombre de cas de test $T$ ($1 \leq T \leq 500$). La description des cas de test suit.

La première ligne de chaque cas de test contient deux entiers $N$ et $M$ ($2 \leq N, M \leq 1000$), les dimensions de la grille.

Les $N$ lignes suivantes contiennent chacune $M$ caractères, décrivant une ligne de la grille. Chaque caractère est soit « # », « . », ou « o ».

Il est garanti que la somme de $N$ sur tous les cas de test ne dépasse pas 1000. Il est garanti que la somme de $M$ sur tous les cas de test ne dépasse pas 1000.

Sortie

Pour chaque cas de test, affichez un seul entier : le nombre de façons de résoudre le puzzle modulo $10^9 + 7$.

Sous-tâches

Soit $(r, c)$ la cellule à la ligne $r$ et à la colonne $c$ ($1 \leq r \leq N, 1 \leq c \leq M$).

  • (10 points) Chaque cellule « o » est à une distance de Manhattan d'au moins 3 de toute autre cellule « o ». C'est-à-dire que si $(r_1, c_1)$ et $(r_2, c_2)$ sont deux cellules « o » différentes, alors $|r_1 - r_2| + |c_1 - c_2| \geq 3$.
  • (30 points) Chaque cellule « o » est verticalement adjacente à au moins une autre cellule « o » ou « # ». C'est-à-dire que pour toute cellule « o » en $(r, c)$, soit $(r - 1, c)$ ou $(r + 1, c)$ est une cellule « # » ou une autre cellule « o ».
  • (60 points) Aucune contrainte supplémentaire.

Exemples

Entrée 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..###
2 3
#.o
.o.
2 2
..
..

Sortie 1

4
6
1
0
1

Remarque

Notez que le premier cas de test satisfait les contraintes de la première sous-tâche et le deuxième cas de test satisfait les contraintes de la deuxième sous-tâche.

Dans le premier cas de test, les 4 façons de résoudre le puzzle sont illustrées ci-dessous :

Dans le deuxième cas de test, les 6 façons de résoudre le puzzle sont illustrées ci-dessous :

Dans le troisième cas de test, la seule façon de résoudre le puzzle est illustrée ci-dessous :

Dans le quatrième cas de test, il n'y a aucune façon de résoudre le puzzle.

Dans le cinquième cas de test, il n'y a aucune cellule « o », donc la seule façon de résoudre le puzzle est de ne placer aucun 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.