题目描述
题解
如果使用暴力求解的方法,只能过70%的用例。仔细分析可以发现:
因此可以求出每个节点的左上角所有节点的和(前缀和),之后就可以根据中心节点周围四个节点的位置来求出领域均值。
代码
n,l,r,t=map(int,input().split())
a=[]
for i in range(n):
a.append(list(map(int,input().split())))
b=a.copy()
for i in range(len(a)):
for j in range(len(a[0])):
if i==0 and j==0:
b[i][j]=b[j][j]
elif i==0:
b[i][j]=b[i][j]+b[i][j-1]
elif j==0:
b[i][j]=b[i][j]+b[i-1][j]
else:
b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+b[i][j]
lo,right,hi,left,sum,res=0,0,0,0,0,0
for i in range(n):
lo = 0 if i - r < 0 else i - r
hi = n - 1 if i + r >= n else i + r
for j in range(n):
right=n-1 if j+r>=n else j+r
left=0 if j-r<0 else j-r
if lo==0 and left==0:
sum=b[hi][right]
elif lo==0:
sum=b[hi][right]-b[hi][left-1]
elif left==0:
sum=b[hi][right]-b[lo-1][right]
else:
sum=b[hi][right]-b[lo-1][right]-b[hi][left-1]+b[lo-1][left-1]
shuliang=(right-left+1)*(hi-lo+1)
if sum*1.0/shuliang-t*1.0 <=0 :
res+=1
print(res)