题目描述
在n*m的地图上,存在一个喷水点(x,y). 如果相邻的位置低于有水的地方,水就能流到相邻的某位置。 已知各个地方的海拔高度,求水的最大覆盖个格子数。
输入描述:
第一行输入n,m,x,y.(1<=n,m<=1000,1<=x<=n,1<=y<=m) 以下n行每行m个整数,表示每个格子的海拔.(1<=h<=1000)
输出描述:
输出最大覆盖格子数
示例
输入
3 5 2 3
3 4 1 5 1
2 3 3 4 7
4 1 4 1 1
输出
6
# 请关闭中文输入法,用英文的字母和标点符号。
# 如果你想运行系统测试用例,请点击【执行代码】按钮,如果你想提交作答结果,请点击【提交】按钮,
# 注意:除答案外,请不要打印其他任何多余的字符,以免影响结果验证
# 本OJ系统是基于 OxCoder 技术开发,网址:www.oxcoder.com
# 模版代码提供基本的输入输出框架,可按个人代码习惯修改
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, m, x, y, vector):
result = -1
len_coor = 0
t = x
x = 3-y
y = t-1
coor_i_j = []
for i in range(0, n):
for j in range(0, m):
coor = []
if vector[i][j] < vector[x][y]:
coor.append(i)
coor.append(j)
coor_i_j.append(coor)
len_coor +=1
coor_con = [[x,y]]
for j in range(0, len(coor_con)):
for i in range(0, len(coor_i_j)):
if (abs(coor_i_j[i][0] - coor_con[j][0])<=1 and coor_i_j[i][1] == coor_con[j][1]) or (abs(coor_i_j[i][1] - coor_con[j][1])<=1 and coor_i_j[i][0] == coor_con[j][0]):
coor_con.append(coor_i_j[i])
for i in range(0, len(coor_con)-1):
if coor_con[i][0] == coor_con[i+1][0] and coor_con[i][1] == coor_con[i+1][1]:
pass
else:
result += 1
return result
if __name__ == "__main__":
arr_temp = [int(item) for item in input().strip().split()]
n = int(arr_temp[0])
m = int(arr_temp[1])
x = int(arr_temp[2])
y = int(arr_temp[3])
vector = []
for i in range(n):
vector.append([int(item) for item in input().strip().split()])
sol = Solution()
result = sol.solution(n, m, x, y, vector)
print(result)
未通过,报错,怀疑是题目中xy与程序表示不一致导致
运行失败:不通过
您的代码已保存。
出现错误,您提交的程序运行出错,请根据以下提示进行修改。
Traceback (most recent call last):
File "Main.py", line 56, in
result = sol.solution(n, m, x, y, vector)
File "Main.py", line 22, in solution
if vector[i][j] < vector[x][y]:
IndexError: list index out of range
xy做了转换是因为读题时觉得按照题目中描述,(2,3)点海拔是3,与其相邻且小于它的只有海拔是1的点,显然与答案不符,于是论坛搜索是否有人与我想法一致,看到了一位朋友(TLY-101-010)的解读,按照此方法进行转换,示例可以通过,但是不满足后台判例,比较疑惑,如果有人已通过,可否解答一下疑问呢?