二维有重复计算区间和优化->积分图(前缀和的二维)
注意合理区间计算,每个区间以当前点为中心
通常第一题签到,第二题优化,第三题模拟
#include <bits/stdc++.h>
using namespace std;
int n, l, r, t, integral[605][605], cnt;
int main() {
scanf("%d %d %d %d", &n, &l, &r, &t);
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
scanf("%d", &integral[i][j]);
integral[i][j] += integral[i-1][j] + integral[i][j-1] - integral[i-1][j-1];
}
}
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
int x1 = max(1, i-r), y1 = max(1, j-r), x2 = min(n, i+r), y2 = min(n, j+r);
int sum = integral[x2][y2] - integral[x1-1][y2] - integral[x2][y1-1] + integral[x1-1][y1-1];
if(sum <= t*(x2-x1+1)*(y2-y1+1)) ++cnt; // 除变乘避免精度损失
}
}
cout << cnt;
return 0;
}