AT_hhkb2020_e Lamps
题目描述
有一个由 $H$ 行 $W$ 列组成的网格,每个格子要么是“散乱的”,要么是“未散乱的”。
现在你可以在 $0$ 个或更多未散乱的格子上放置照明灯。
每个照明灯会照亮其所在格子,以及从该格子向上下左右四个方向,直到遇到网格边界或第一个“散乱的”格子为止(“散乱的”格子不会被照亮)。照明灯所在的格子也会被照亮。
给定整数 $H,\ W$ 和 $H$ 个长度为 $W$ 的字符串 $S_i$。当 $S_i$ 的第 $j$ 个字符为 `.` 时,第 $i$ 行第 $j$ 列的格子是未散乱的;当 $S_i$ 的第 $j$ 个字符为 `#` 时,第 $i$ 行第 $j$ 列的格子是散乱的。
假设未散乱的格子的总数为 $K$,则照明灯的放置方法共有 $2^K$ 种。对于这 $2^K$ 种放置方法中的每一种,计算被至少一个照明灯照亮的格子的数量,并将所有方案的总和对 $1,000,000,007$ 取模后输出。
输入格式
输入按以下格式从标准输入给出。
> $H$ $W$
> $S_1$
> $S_2$
> $\vdots$
> $S_H$
输出格式
对于所有 $2^K$ 种放置方法,计算每种情况下被至少一个照明灯照亮的格子的数量之和,并输出其对 $1,000,000,007$ 取模的结果。
说明/提示
## 限制条件
- $1 \leq H \leq 2000$
- $1 \leq W \leq 2000$
- $S_i$ 是仅由 `.` 和 `#` 组成的长度为 $W$ 的字符串
## 样例解释 1
一共有 $16$ 种放置照明灯的方法。
- 其中 $9$ 种(左起第 $1$ 或第 $2$ 个至少有一个放了灯,且左起第 $4$ 或第 $5$ 个至少有一个放了灯)会照亮 $4$ 个格子。
- 其中 $3$ 种(左起第 $1$ 或第 $2$ 个至少有一个放了灯,且左起第 $4$ 和第 $5$ 个都没有放灯)会照亮 $2$ 个格子。
- 其中 $3$ 种(左起第 $4$ 或第 $5$ 个至少有一个放了灯,且左起第 $1$ 和第 $2$ 个都没有放灯)会照亮 $2$ 个格子。
- 其中 $1$ 种(一个灯也没放)会照亮 $0$ 个格子。
所以答案为 $4 \times 9 + 2 \times 3 + 2 \times 3 + 0 \times 1 = 48$。
由 ChatGPT 4.1 翻译