题目描述
代码展示:
#include<bits/stdc++.h>
#define N 602
using namespace std;
int a[N][N];
int b[N][N];
int main() {
int Sum=0;
int n,L,r,t;
cin>>n>>L>>r>>t;
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
cin>>a[i][j];
if(j!=0)//计算另外一个矩阵 将i行且在a[i][j]之前(包含自己)的元素全部加起来 储存在b[i][j]中
b[i][j]=b[i][j-1]+a[i][j];
else
b[i][j]=a[i][j];
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
int up=i-r,down=i+r,left=j-r,right=j+r;
if(up<=0)//计算边界
up=0;
if(down>=n-1)
down=n-1;
if(left<=0)
left=0;
if(right>=n-1)
right=n-1;
double num=(right-left+1)*(down-up+1);//邻域树木
double sum=0;
for(int k=up; k<=down; k++) {//算和
sum+=b[k][right];
if(left>=1)
sum-=b[k][left-1];
}
sum=sum/num;
if(sum<=t)
Sum++;
}
}
cout<<Sum<<endl;
}
思路:
计算另外一个矩阵 将i行且在a[i][j]之前(包含自己)的元素全部加起来 储存在b[i][j]中 ,后面通过边界限定只需要加减b矩阵就好了
利用每列元素相邻均值有相同之处