CSP 202104-2 邻域均值 python 二维前缀和

CSP 202104-2 邻域均值 python 二维前缀和

题目描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

思路

这道题可以简单的先,我们可以用暴力法,但是暴力法只能过70%的数据

实际上我们是利用一个前缀和的思想进行求解,只需要求出前缀和,然后得出领域的和,这样我们就不用使用双重循环暴力求解了,具体实现可以看一下代码

这里注意一个点,由于矩阵有边界,因此需要对边界范围进行处理

代码

# http://118.190.20.162/view.page?gpid=T127

n,L,r,t = map(int,input().split())
A = [[0]*(n+2)]
for i in range(n):
    A.append([0] + list(map(int,input().split())) + [0])
A.append([0]*(n+1))

b = [[0]*(n+2) for i in range(n+2)]

for i in range(1,n+1):
    for j in range(1,n+1):
        b[i][j] = b[i-1][j] + b[i][j-1] - b[i-1][j-1] + A[i][j] # 处理前缀和矩阵
        
sum = 0
for i in range(1,n+1):
    for j in range(1,n+1):
        x1 = max(i-r,1)
        y1 = max(j-r,1)
        x2 = min(i+r,n)
        y2 = min(j+r,n)
        ans = (x2-x1+1)*(y2-y1+1) # 领域内的个数
        if (b[x2][y2] + b[x1-1][y1-1] - b[x1-1][y2] - b[x2][y1-1])/ans  <= t:
            sum += 1
print(sum)

猜你喜欢

转载自blog.csdn.net/weixin_45508265/article/details/125075131