方法一:暴力模拟(需要注意除法强转一下double)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,l,r,t;
cin>>n>>l>>r>>t;
int result=0;
vector<vector<int> > num(n,vector<int> (n,0));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>num[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
int sum=0;
int count=0;
for(int x=max(i-r,0);x<=i+r&&x<n;x++)
{
for(int y=max(j-r,0);y<=j+r&&y<n;y++)
{
sum+=num[x][y];
count++;
}
}
if((double)sum/(double)count<=t)
result++;
}
}
cout<<result;
return 0;
}
满分解法(二维前缀和)
#include<bits/stdc++.h>
using namespace std;
const int N=650;
int a[N][N]={0};
int sum[N][N]={0};
int result=0;
int main()
{
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>>a[i][j];
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int x1=max(i-r,1);
int y1=max(j-r,1);
int x2=min(i+r,n);
int y2=min(j+r,n);
int tmp=sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];
if((double)tmp/(double)((x2-x1+1)*(y2-y1+1))<=t)
result++;
}
}
cout<<result;
return 0;
}