#4881. 盖印章

盖印章

题目描述

给定一个 n×mn \times m 的网格,每个格子要么被占用(1),要么是空白(0)。你有一个高度为 hh、宽度为 ww 的矩形印章,只能覆盖空白格子。你可以多次盖章,印章可以重叠,但每次盖章必须完全在网格边界内,且覆盖区域内不能有任何被占用的格子。

问能否通过若干次盖章,使得所有空白格子都被覆盖至少一次。

输入格式

第一行包含两个整数 n,mn, m,表示网格的行数和列数。

接下来 nn 行,每行 mm 个整数(01),描述网格状态。

最后一行包含两个整数 h,wh, w,表示印章的高度和宽度。

输出格式

如果能够覆盖所有空白格子,输出 true;否则输出 false

样例

5 4
1 0 0 0
1 0 0 0
1 0 0 0
1 0 0 0
1 0 0 0
4 3
true

样例解释
网格中 1 表示占用,0 表示空白。印章大小为 4×34 \times 3
第一次盖章覆盖第 141 \sim 4 行、第 242 \sim 4 列的区域(全部为空白);第二次盖章覆盖第 252 \sim 5 行、第 242 \sim 4 列的区域(其中第一行为占用,但印章从第 22 行开始,区域内均为空白或已被覆盖)。最终所有空白格子均被覆盖,故输出 true

4 4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
2 2
false

样例解释
印章大小为 2×22 \times 2,无论如何放置,都无法覆盖到所有空白格子而不碰到占用格子,故输出 false

数据范围

  • 1n,m1031 \le n, m \le 10^3
  • 1hn1 \le h \le n1wm1 \le w \le m
  • grid[i][j]01