有一个有 H 行和 W 列的网格。设 (i,j) 表示从上往下第 i 行和从左往下第 j 列的单元格。 每个单元格包含字符 o、x 和 . 中的一个。
每个单元格中写入的字符由长度为 W 的 H 个字符串 S 1 、S 2 、…、S H 表示;单元格 (i,j) 中写入的字符是字符串 S i 的第 j 个字符。
对于此网格,您可以重复以下操作任意次,可能是零次: 选择一个包含字符 . 的单元格,并将该单元格中的字符更改为 o。
确定是否有可能有一个 K 个水平或垂直连续单元格序列,其中所有单元格中都写入 o(换句话说,满足以下两个条件中的至少一个)。
如果可能,请打印实现此目的所需的最少操作次数。
存在一个整数对 (i,j),满足 1≤i≤H 和 1≤j≤W−K+1,使得单元格 (i,j),(i,j+1),…,(i,j+K−1) 中的字符全为 o。 存在一个整数对 (i,j),满足 1≤i≤H−K+1 和 1≤j≤W,使得单元格 (i,j),(i+1,j),…,(i+K−1,j) 中的字符全为 o。
---
二维前缀和处理,当区间的X前后值一样,说明中间没有X,那么就可以填补使得出现k个连续的O,所以还要记录.的数量,这样就是要填补的数量,每次更新最小值,如果最小值还是最大的那个值,就返回-1,然后就是这里面要遍历2次,横向跟纵向都要遍历才行。只是我以为一开始要dfs才行呢,不得已看了题解代码才知道怎么做了。。。至少这样做不会超时的。
bili_18874243510 2023-10-27
梦想清华清美考研 2024-01-06