CCF考试 2021年4月第2题 邻域均值

题目描述

CCF考试 2021年4月第2题 邻域均值_第1张图片

代码展示:

#include
#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矩阵就好了
利用每列元素相邻均值有相同之处

你可能感兴趣的:(CCF,c++,ccf)