题目传送门:
点击这里
#include<bits/stdc++.h>
#define N 601
using namespace std;
int a[N][N],psum[N][N];
//psum:prefixsum,前缀和
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//加快输入输出速度
memset(psum,0,sizeof psum);
int n,l,r,t;
//矩阵长宽均为n,每个元素的范围时0到l;
//某元素周围最多有r个元素,A
//ij领域内所有元素均值小于等于t,则它处于灰度区域。
cin>>n>>l>>r>>t;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
psum[i][j]=psum[i][j-1]+psum[i-1][j]-psum[i-1][j-1]+a[i][j];
// 此元素的前一个+此元素同列上一个-此元素上一行前一列
}
}
int count =0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int left2=max(j-r,1),right2=min(j+r,n);
int up=max(i-r,1),down=min(i+r,n);
int t2 = psum[down][right2] - psum[down][left2 - 1] - psum[up - 1][right2] + psum[up - 1][left2 - 1];
if(t2<=(down-up+1)*(right2-left2+1)*t)
count++;
}
}
cout<<count<<endl;
return 0;
}