兰州模板型网站建设,辽宁建设工程信息网为什么上不去啦,网站推广优化技巧,一个网址需要多少钱题意
传送门 AtCoder ABC260 G Scalene Triangle Area
题解
暴力 前缀和
对每一行计算前缀和#xff0c;处理每一个询问时暴力枚举每一行进行累加。总时间复杂度 O ( n ( n q ) ) O\Big(n(n q)\Big) O(n(nq))。
#include bits/stdc.h
using namespace std;vo…题意
传送门 AtCoder ABC260 G Scalene Triangle Area
题解
暴力 前缀和
对每一行计算前缀和处理每一个询问时暴力枚举每一行进行累加。总时间复杂度 O ( n ( n q ) ) O\Big(n(n q)\Big) O(n(nq))。
#include bits/stdc.h
using namespace std;void solve() {int n, m;cin n m;vectorstring ss(n);for (int i 0; i n; i) {cin ss[i];}vectorvectorint sum(n, vectorint(n 1));for (int i 0; i n; i) {for (int j 0; j n; j) {sum[i][j 1] sum[i][j] (ss[i][j] O);}}int q;cin q;while (q--) {int u, v;cin u v;u - 1;v - 1;int res 0;for (int s u; s max(-1, u - m); --s) {res sum[s][v 1] - sum[s][max(-1, v - 2 * (m s - u)) 1];}cout res \n;}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);solve();return 0;
}累积和
根据 Tutorial 的累积和做法可以不断根据某一维度做差分直到差分需要处理的规模适当的小甚至可以按照不同维度分别处理贡献后再累计求和。总时间复杂度 O ( n 2 ) O(n^2) O(n2)。
#include bits/stdc.h
using namespace std;void solve() {int n, m;cin n m;vectorstring ss(n);for (int i 0; i n; i) {cin ss[i];}vectorvectorint a(n, vectorint(n));for (int i 0; i n; i) {for (int j 0; j n; j) {if (ss[i][j] O) {a[i][j] 1;if (i m n) {a[i m][j] - 1;}}}}for (int j 0; j n; j) {for (int i 0; i 1 n; i) {a[i 1][j] a[i][j];}}vectorvectorint b(n, vectorint(5 * n));for (int i 0; i n; i) {for (int j 0; j n; j) {if (ss[i][j] O) {b[i][j 2 * m] - 1;if (i m n) {b[i m][j] 1;}}}}for (int i 0; i 1 n; i) {for (int j 0; j 2 5 * n; j) {b[i 1][j] b[i][j 2];}}vectorvectorint sum(n, vectorint(n));for (int i 0; i n; i) {for (int j 0; j n; j) {sum[i][j] a[i][j] b[i][j];}}for (int i 0; i n; i) {for (int j 0; j 1 n; j) {sum[i][j 1] sum[i][j];}}int q;cin q;while (q--) {int x, y;cin x y;x - 1, y - 1;cout sum[x][y] \n;}
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);solve();return 0;
}