202104-2 邻 域 均 值

202104-2 邻 域 均 值
202104-2 邻 域 均 值
二维数组的前缀和,真希望当时考试的时候我能写出来啊呜呜。
读完题,看完这篇博客,此题一写就会了

二维数组前缀和的求法,以及子矩阵和的求法

#include<iostream>
#include<string>
#include<algorithm>
#include<bits/stdc++.h>
#include<stack>
#include<set>
#include<vector>
#include<map>
#include<queue>
#include<deque>
#include<cctype>
#include<unordered_set>
#include<unordered_map>
#include<fstream>
#include<cstring>
using namespace std;
const int N = 610;
int a[N][N];
int sum[N][N];
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];
			
		}
	}
	int count = 0;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
		//	根据题目中给的表达式,确定范围,边界是 1 到 n
			int a = max(1, i - r), b = max(1, j - r);
			int c = min(n, i + r), d = min(n, j + r);
			// 求子矩阵的大小
			int s = sum[c][d] - sum[c][b - 1] - sum[a - 1][d] + sum[a - 1][b - 1];
			// 求子矩阵元素的个数
			int cnt = (c - a + 1) * (d - b + 1);
			// 判断平均值
			if (s <= t * cnt) {
				count++;
			}
		}
	}
	cout << count;
}


上一篇:202104-2 邻域均值


下一篇:CSP第22次 202104-4 校门外的树 C语言答案