题目
CCF-CSP考试2021年4月第2题(邻域均值)
思路
一开始是每个点算一下,只拿了70%的分,应该是因为超时。后来改成滑动窗口的解法,每个点用左边或者上边的结果,再加/减去一行/列,就可以拿满了。
主要难点在怎么控制什么时候减掉或加上一行或一列,我采用的方法是计算现在和之前的边界,通过其差值来控制。
代码
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
#include <stack>
#include <stdlib.h>
#define infinity 1e5
using namespace std;
int n, L, r, t;
int matrix[601][601];
int sum_r[601][601] = {
0};
struct node {
int xr, xl, yr, yl;
};
int clip(int x) {
if (x < 0) return 0;
if (x >= n) return n - 1;
return x;
}
node cal(int x, int y) {
int xr, xl, yr, yl;
xr = clip(x + r);
xl = clip(