NOJ南邮上机 华强种瓜 PROB1018 Python

PROB18     华强种瓜

描述:

华强买到了不保熟的瓜,他很生气,遂决定……自己种瓜!

第二天,华强承包了一大片瓜田,他买来了 n^2 个保熟的西瓜种子,并且严格按照一个 n×n 米间距的网格进行种植。为了方便华强记忆,这个网格的坐标从 1 开始编号,到 n 结束。

为了让瓜保熟,他又买来了 k 个洒水器,洒水器工作半径为 r 米,安装在在网格中的某些种子的正上方。

安装完这些洒水器后,华强很想知道现在他的瓜里面有多少能够被撒到水。

输入:

输入共包含 n+k 行。

第一行包含 3 个整数 n、k 和 r,分别表示网格边距、洒水器数量和洒水器工作半径,题目保证 1≤n,k≤200。

接下来 k 行,每行两个整数 x 和 y,表示每个洒水器在网格中的坐标 (x,y)。

输出:

一行一个整数,表示被洒水器覆盖到的西瓜总数。

样例输入:

5 2 1
3 3
4 2

样例输出: 

8

注释:

对于第一组样例,(3,3)(3,3) 上的洒水器工作半径可以覆盖到 (3,3) (4,3) (2,3) (3,2) (3,4) 的瓜。而 (4,2)上的洒水器可以覆盖到 (4,2)(5,2)(3,2) (4,1) (4,3) 的瓜。去重后,共有 8 个瓜被覆盖到。

 基于python实现的代码:

def covered_watermelons_nums(n , k, r, positions):
    covered_watermelons = set()
    for x, y in positions:
        for i in range(max(1, x-r), min(n+1, x+r+1)):
            for j in range(max(1, y-r), min(n+1, y+r+1)):
                if (x-i)**2 + (y-j)**2 <= r**2:
                    covered_watermelons.add((i, j))
    return len(covered_watermelons)
n,k,r = map(int,input().strip().split())
positions = [tuple(map(int,input().strip().split())) for i in range(k)]
print(covered_watermelons_nums(n , k, r, positions))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾凡a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值