【Mc生存】插火把
题目描述
话说有一天 linyorson 在“我的世界”开了一个 $n \times n$ 的方阵,现在他有 $m$ 个火把和 $k$ 个萤石,分别放在 $(x_1, y_1) \sim (x_m, y_m)$ 和 $(o_1, p_1) \sim (o_k, p_k)$ 的位置,没有光并且没放东西的地方会生成怪物。请问在这个方阵中有几个点会生成怪物?
P.S. 火把的照亮范围是:
|暗|暗| 光 |暗|暗|
|暗|光| 光 |光|暗|
|光|光|火把|光|光|
|暗|光| 光 |光|暗|
|暗|暗| 光 |暗|暗|
萤石:
|光|光| 光 |光|光|
|光|光| 光 |光|光|
|光|光|萤石|光|光|
|光|光| 光 |光|光|
|光|光| 光 |光|光|
输入格式
输入共 $m + k + 1$ 行。
第一行为 $n, m, k$。
第 $2$ 到第 $m + 1$ 行分别是火把的位置 $x_i, y_i$。
第 $m + 2$ 到第 $m + k + 1$ 行分别是萤石的位置 $o_i, p_i$。
注:可能没有萤石,但一定有火把。
输出格式
有几个点会生出怪物。
样例 #1
样例输入 #1
5 1 0
3 3
样例输出 #1
12
提示
数据保证,$1 \le n \le 100$,$1 \leq m+k \leq 25$,$1 \leq m \leq 25$,$0 \leq k \leq 5$。
参考答案
value=input().split()
n,m,k=int(value[0]),int(value[1]),int(value[2])
b=[]
for i in range(n):
temp = []
for j in range(n):
temp.append(0)
b.append(temp)
def zuobiao(x1,y1):
if 0<=x1<=n-1 and 0<=y1<=n-1:
return 1
else:
return 0
def huo(x,y):
heng=x-2
for i in range(heng,heng+5):
temp= zuobiao(i,y)
if temp:
b[i][y] = 1
lie=y-2
for i in range(lie,lie+5):
temp= zuobiao(x,i)
if temp:
b[x][i] = 1
listx=[x-1,x+1]
listy=[y-1,y+1]
for i in listx:
for j in listy:
temp= zuobiao(i,j)
if temp:
b[i][j] = 1
def yingshi(x,y):
heng=x-2
lie=y-2
for i in range(heng,heng+5):
for j in range(lie,lie+5):
temp= zuobiao(i,j)
if temp:
b[i][j] = 1
for i in range(m):
x1,y1=map(int,input().split())
huo(x1-1,y1-1)
for i in range(k):
x2,y2=map(int,input().split())
yingshi(x2-1,y2-1)
count=0
for i in range(n):
for j in range(n):
print(b[i][j],end=' ')
if b[i][j]==0:
count+=1
print()
print(count)