洛谷 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的主要内容,如果未能解决你的问题,请参考以下文章

洛谷P1789Mc生存插火把 题解

P1789 Mc生存插火把

P1789 Mc生存插火把

P1789 Mc生存插火把

[模板]洛谷T3369 普通平衡树 链表&递归版无父指针版Splay

手机版我的世界怎么防止迷路