#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#define N 601
int arr[N][N];
int sum[N][N];
int main(){
// 对 cin 和 cout 进行提速
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// 对 sum 前缀和进行清空
memset(sum,0,sizeof(sum));
// 接收相关数据
int n,l,r,t;
cin>>n>>l>>r>>t;
for(int i =1;i<=n;i++){
for(int j =1;j<=n;j++){
cin>>arr[i][j];
// sum[i][j]表示从(0,0)到(i,j)的和
sum[i][j]=arr[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
}
}
int count=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
// 下面的范围可手动求解不等式得
int right=min(r+j,n);
int left= max(j-r,1);
int low=min(r+i,n);
int up=max(i-r,1);
// 求范围内的和
int area = sum[low][right] - sum[low][left-1]-sum[up-1][right]+sum[up-1][left-1];
// 通过平均值来求得标准和
if(area<=((low-up+1)*(right-left+1)*t)){
count++;
}
}
}
cout<<count;
return 0;
}
参考:
CCF202104-2 邻域均值(100分)【前缀和】_海岛Blog-CSDN博客_邻域均值
写在最后:
该博客是本人学习的一些总结,如果各位有不同见解,可以评论提出或者与我联系改正,谢谢阅览!!!