领域均值
4 16 1 6 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
7
11 8 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 7 0 0 7 7 0 7 0 7 0 7 0 7 0 7 0 7 7 0 0 0 7 0 0 0 7 0 7 7 0 0 0 0 7 0 0 7 7 0 7 0 0 0 0 0 7 0 7 0 0 7 0 7 0 7 0 7 0 7 0 0 0 7 0 0 0 7 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
83
题解:最普通的思路,根据每一个(i,j), 按照给定的r, for for 循环暴力,不好意思,会超时,如下所示,这里要更正一下,实际超时这个代码,在当时考试的时候,只拿了30分,所以之前博客说的,模拟时间更长是错的
1 n,L,r,t=input().split() 2 n,L,r,t=int(n),int(L),int(r),int(t) 3 A=[list(map(int, input().split())) for _ in range(n)] 4 5 def get_all_point(p_x1,p_x2,p_y1,p_y2): 6 summ=0 7 count=0 8 for i in range(p_x1,p_x2+1): 9 for j in range(p_y1,p_y2+1): 10 summ+=A[i][j] 11 count+=1 12 13 if summ/count<=t: 14 # print(summ,count,end=' ') 15 return 1 16 else: 17 return 0 18 19 20 def get_coor(index1,r): 21 tmp1,tmp2=index1-r,index1+r 22 if tmp1<0: 23 tmp1=0 24 if tmp2>=n: 25 tmp2=n-1 26 return tmp1,tmp2 27 28 29 def main(): 30 res=0 31 for i in range(n): 32 for j in range(n): 33 p=(i,j) 34 p_x1,p_x2=get_coor(i,r) 35 p_y1,p_y2=get_coor(j,r) 36 temp=get_all_point(p_x1,p_x2,p_y1,p_y2) 37 res+=temp 38 print(res) 39 40 if __name__=="__main__": 41 main()
二维前缀和解法,而这里领域内的像素点个数,可以通过矩形面积来求解
1 if __name__=="__main__": 2 n,L,r,t=list(map(int, input().split())) 3 A=[[0]*n for _ in range(n)] 4 B=[[0]*n for _ in range(n)] 5 for i in range(n): 6 ans=list(map(int,input().split())) 7 for j in range(n): 8 left1=0 if j-r-1<0 else ans[j-r-1] 9 right1=0 if j+r>n-1 else ans[j+r] 10 if j>0: 11 A[i][j]=A[i][j-1]+right1-left1 12 else: 13 A[i][j]=sum(ans[:r+1]) 14 summ=0 15 for i in range(n): 16 for j in range(n): 17 right=n-1 if j+r>n-1 else j+r 18 up=0 if i-r<0 else i-r 19 left=0 if j-r<0 else j-r 20 bottom=n-1 if i+r>n-1 else i+r 21 if i>0: 22 u1=0 if i-r-1<0 else A[i-r-1][j] 23 b1=0 if i+r>n-1 else A[i+r][j] 24 B[i][j]=B[i-1][j]+b1-u1 25 else: 26 for k in range(r+1): 27 B[i][j]+=A[k][j] 28 29 if B[i][j]/((right-left+1)*(bottom-up+1)) <=t: 30 summ+=1 31 print(summ)