洛谷 P1789 插火把 Python
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1789 插火把 Python相关的知识,希望对你有一定的参考价值。
参考技术A 第一点其实很多小伙伴题目都看不懂 主要就在于输入的格式 第一行是n,m,k这个就没什么好解释第二行到第 m + 1 行分别是火把的位置 其实这个时候可以把m带进去就是1 按照样例来说其实第二行输入的就是火把的坐标
以次类推 其实可以有多行 就是2到m+1行都是火把的坐标
m+2到m+k+1其实就是萤石的坐标 如果还不懂自己写两个就知道了
其实看到题目就知道是创建二维列表 没什么好说的
主要是火把的处理比较麻烦 萤石比较简单
注意输入的坐标都要减一是对应列表的坐标
x,y 这个时候x其实理解为列 y为行就明白了 先把y对应的上下五行设为True而列不变就可以了
for i in range(x-2, x+3): # 控制y 行
把x对应的左右设为True而行不变就可以了 至于为什么x-2,y-2,x+3是什么就不解释了
那么还有四个没有处理 其实就是把3行3列设置为True就可以 x-1,y+2不就可以了吗
n, m, k = map(int, input().split())
sum = n * n
mp = [] # 生成二维列表
for i in range(n):
mp.append([])
for j in range(n):
mp[i].append(False)
while m > 0:
x, y = map(int, input().split())
x -= 1 # 改为列表的索引 2,2
y -= 1
for i in range(x-2, x+3): # 控制y 行
if i < 0 or i >= n:
continue
else:
mp[i][y] = True
for i in range(y-2, y+3): # 控制x 列
if i < 0 or i >= n:
continue
else:
mp[x][i] = True
for i in range(x-1, x+2): # 控制行
for j in range(y-1, y+2): # 控制列
if i < 0 or i >= n or j < 0 or j >= n:
continue
else:
mp[i][j] = True
m -= 1
while k > 0:
x, y = map(int, input().split())
x -= 1
y -= 1
for i in range(x-2, x+3):
for j in range(y-2, y+3):
if i < 0 or i >= n or j < 0 or j >= n:
continue
else:
mp[i][j] = True
k -= 1
cnt = 0
for i in range(n):
for j in range(n):
if mp[i][j]:
cnt += 1
print(sum - cnt)
以上是关于洛谷 P1789 插火把 Python的主要内容,如果未能解决你的问题,请参考以下文章