AT_abc337_d [ABC337D] Cheating Gomoku Narabe

题目描述

有一个 $H$ 行 $W$ 列的网格。自上而下的第 $i$ 行,自左而右的第 $j$ 列的格子称为格子 $(i, j)$。 每个格子上写有 `o`、`x` 或 `.` 中的某一个字符。每个格子上的字符由 $H$ 个长度为 $W$ 的字符串 $S_1, S_2, \ldots, S_H$ 表示,格子 $(i, j)$ 上的字符与字符串 $S_i$ 的第 $j$ 个字符相同。 对于这个网格,你可以重复进行如下操作任意次(包括 $0$ 次): - 选择一个写有 `.` 的格子,将其字符改为 `o`。 请判断是否有可能通过若干次上述操作,使得存在纵向或横向连续的 $K$ 个格子,这些格子上的字符全为 `o`(即,满足以下两个条件中**至少一个**): - 存在整数对 $(i, j)$,满足 $1 \leq i \leq H$ 且 $1 \leq j \leq W-K+1$,使得格子 $(i, j), (i, j+1), \ldots, (i, j+K-1)$ 上的字符全为 `o`。 - 存在整数对 $(i, j)$,满足 $1 \leq i \leq H-K+1$ 且 $1 \leq j \leq W$,使得格子 $(i, j), (i+1, j), \ldots, (i+K-1, j)$ 上的字符全为 `o`。 如果可能,请输出所需操作次数的最小值。

输入格式

输入按以下格式从标准输入读入。 > $H$ $W$ $K$ > $S_1$ > $S_2$ > $\vdots$ > $S_H$

输出格式

如果无法满足题目中的条件,输出 `-1`;如果可以,输出所需操作次数的最小值。

说明/提示

## 限制条件 - $H, W, K$ 均为整数。 - $1 \leq H$ - $1 \leq W$ - $H \times W \leq 2 \times 10^5$ - $1 \leq K \leq \max\lbrace H, W \rbrace$ - $S_i$ 仅由 `o`、`x`、`.` 组成,且长度为 $W$。 ## 样例解释 1 进行 $2$ 次操作,例如将格子 $(2, 1)$ 和格子 $(2, 2)$ 上的字符分别改为 `o`,即可满足题目中的条件,这也是最小的操作次数。 ## 样例解释 2 即使一次操作也不进行,也能满足题目中的条件。 ## 样例解释 3 无法满足题目中的条件,因此输出 `-1`。 由 ChatGPT 4.1 翻译