QOJ.ac

QOJ

Süre Sınırı: 3 s Bellek Sınırı: 512 MB Toplam puan: 100 Hack'lenebilir ✓

#22828. Aqua

İstatistikler

Aqua es un juego de lógica en un tablero rectangular dividido en $r$ filas y $c$ columnas. Las filas se numeran del $1$ al $r$ de abajo arriba, y las columnas del $1$ al $c$ de izquierda a derecha. La celda de la fila $i$ y la columna $j$ se denota por $(i,j)$.

El tablero se divide mediante límites verticales y horizontales en varias regiones conectadas ortogonalmente. Más precisamente, cada región es un subconjunto no vacío de las celdas. Cada celda pertenece exactamente a una región. Las celdas de una región forman una componente conexa: entre dos celdas de la misma región siempre se puede pasar usando solo celdas de esa región, con cada paso entre celdas que comparten un lado.

problem_22828_cacd86d1830994c84de7c3ab2ee1c931.png

Figura A.1: Un tablero de 6 filas, 7 columnas y 8 regiones.

En cada región, el creador vierte agua desde sus bordes superiores. Debido a la gravedad, el agua cae a las celdas más bajas. Vierte el agua de modo que se cumplan todas estas condiciones:

  • Cada celda está completamente llena de agua o completamente vacía.

  • Una región puede estar llena de agua, completamente vacía o parcialmente llena.

  • En cada región existe un nivel $\ell$ tal que todas las celdas de la región por debajo están llenas y todas las celdas por encima están vacías. Es decir, sean $(r_1,c_1)$ y $(r_2,c_2)$ dos celdas de la misma región con $r_1 \le r_2$; si $(r_2,c_2)$ está llena, $(r_1,c_1)$ también debe estar llena.

  • Las regiones se tratan por separado e independientemente. Por tanto, la regla anterior no se aplica a celdas de regiones distintas.

A continuación se muestra un ejemplo de tablero válido:

problem_22828_5f720c9c7f57466c69726353a8bd7d70.png

Figura A.2: Un tablero válido.

A continuación se muestran algunos tableros no válidos:

problem_22828_4f402c835cbcd9482462c8867aac91fe.png

Figura A.3: Tablero no válido: las celdas $(5,5)$ y $(5,7)$ deben estar ambas llenas o ambas vacías, porque pertenecen a la misma región y fila.

problem_22828_f029f0f5dfa1e3112e2fc7034574f2ca.png

Figura A.4: Tablero no válido: las celdas $(4,2)$, $(4,3)$ y $(4,4)$ están vacías, pero pertenecen a la misma región que $(5,2)$, que está llena de agua.

problem_22828_14512c5331df2bc2a7b70cf769d314fb.png

Figura A.5: Tablero no válido: las celdas no pueden estar parcialmente llenas.

El creador no solo sigue estas reglas; también tiene en cuenta el número de celdas llenas de cada fila. En algunas filas quiere que este número sea igual a ciertos valores fijos, mientras que no impone restricciones a otras filas.

Tu tarea es contar las formas de verter agua en las regiones que satisfagan todas las reglas y requisitos anteriores. Dos formas se consideran diferentes si y solo si existe una celda llena en una y vacía en la otra.

Entrada

La primera línea contiene dos enteros $r,c$ ($1 \le r,c \le 20$). Las siguientes $r+1$ líneas describen el tablero según estas reglas:

  • Cada línea contiene exactamente $2\cdot c+1$ caracteres, cada uno de los cuales es un espacio, un guion bajo (_) o una barra vertical (|).

  • Todos los caracteres en posiciones de índice par de la primera y la última línea son guiones bajos, que representan los bordes superior e inferior del tablero.

  • Cada guion bajo restante representa un límite horizontal entre regiones situado entre dos celdas consecutivas de la misma columna.

  • El primer y último carácter de todas las líneas salvo la primera son barras verticales, que representan los bordes izquierdo y derecho del tablero.

  • Cada barra vertical restante representa un límite vertical entre regiones situado entre dos celdas consecutivas de la misma fila.

Consulta los ejemplos para comprenderlo mejor.

Por definición:

  • Si no hay un límite horizontal entre dos celdas consecutivas de una columna, pertenecen a la misma región.

  • Si no hay un límite vertical entre dos celdas consecutivas de una fila, pertenecen a la misma región.

La última línea contiene $r$ enteros $x_1,x_2,\ldots,x_r$ ($-1 \le x_i \le c$) que describen los requisitos del número de celdas llenas de cada fila. Si $x_i=-1$, la fila $r-i+1$ puede tener cualquier número de celdas con agua. En otro caso, el número de celdas llenas de esa fila debe ser exactamente $x_i$.

Se garantiza que el tablero tiene como máximo 20 regiones.

Salida

La salida contiene exactamente un entero: el número de tableros válidos que cumplen las condiciones, módulo $10^9+7$.

Ejemplos

Entrada 1

6 7
 _ _ _ _ _ _ _ 
| |  _ _|  _  |
| | |_ _| |_| |
| |_ _ _|  _ _|
| |  _ _| |   |
| | |_ _| |   |
|_|_ _ _|_|_ _|
6 3 7 2 2 2

Salida 1

1

Nota

El primer ejemplo corresponde a la figura A.2 de arriba.

Entrada 2

2 3
 _ _ _ 
|     |
|_ _ _|
-1 -1

Salida 2

3

Entrada 3

3 3
 _ _ _ 
|  _  |
| | | |
|_|_|_|
-1 1 1

Salida 3

1

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.