#5842. 盖印章
盖印章
题目描述
给定一个 的二进制网格 grid,其中 grid[i][j] = 1 表示单元格被占用,grid[i][j] = 0 表示单元格为空白。
你有一个矩形印章,高度为 h,宽度为 w。你想用这个印章来覆盖所有空白单元格,但不能覆盖任何被占用的单元格。你可以多次盖章,印章可以重叠。
返回 true 如果可以通过盖章使所有空白单元格都被覆盖,否则返回 false。
印章规则:
- 印章必须完全在网格边界内
- 印章覆盖的所有单元格必须都是空白(即
grid[i][j] = 0) - 同一个位置可以多次盖章
- 印章不能旋转 度来盖章,也就是 的印章只能覆盖高度为 ,宽度为 的区域,但不能覆盖高度为 ,宽度为 的区域。
输入格式
- 第一行输入两个整数 ,表示网格的行数和列数
- 接下来 行,每行 个整数(0 或 1),表示
grid - 最后再输入两个整数 ,表示印章的高度和宽度
输出格式
- 输出一行:如果可以通过盖章使所有空白单元格都被覆盖,输出
true,否则输出false
输入样例 1
5 4
1 0 0 0
1 0 0 0
1 0 0 0
1 0 0 0
1 0 0 0
4 3
输出样例 1
true
样例 1 解释
网格如下,其中 # 表示被占用(1),. 表示空白(0):
# . . .
# . . .
# . . .
# . . .
# . . .
印章高度 4,宽度 3。
第 1 次我们可以将印章盖在位置 (1,2),覆盖从 (1,2) 到 (4,4) 的矩形区域,此时网格会变为:
# 1 1 1
# 1 1 1
# 1 1 1
# 1 1 1
# . . .
第 2 次我们可以将印章盖在位置 (2,2),覆盖从 (2,2) 到 (5,4) 的矩形区域,此时网格会变为:
# 1 1 1
# 2 2 2
# 2 2 2
# 2 2 2
# 2 2 2
所有空白单元格都被覆盖,因此输出 true。
输入样例 2
4 4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
2 2
输出样例 2
false
样例 2 解释
无论如何也无法覆盖所有空白单元格,且不超出网格边界,因此输出 false。
数据范围
grid[i][j]为 0 或 1