#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
/// freopen ("input.txt", "r", stdin);
bool Inverse = 0;
int n, m;
cin >> n >> m;
if (n > m) {
Inverse = 1;
swap(n, m);
}
assert(n <= m);
vector<vector<ll>> radiation(n + 1, vector<ll> (m + 1, 0)), v(n + 1, vector<ll> (m + 1, 0));
function<void(int, int, int, int, int)> proc = [&] (int dist, int r, int c, int a, int b) {
int stop = max(m - c, c - 1);
assert(a - dist * b >= 1);
int L = max(1, c - dist), R = min(m, c + dist);
for (int j = L; j <= R; j++) {
v[r][j] += a - dist * b;
}
if (dist + 1 <= stop) {
for (int dist2 = dist + 1; dist2 <= stop; dist2++) {
assert(c + dist2 <= m || c - dist2 >= 1);
if (c + dist2 <= m) {
int c2 = c + dist2;
int dist_max = max(dist, dist2);
v[r][c2] += max(0LL, a - 1LL * b * dist_max);
}
if (c - dist2 >= 1 && dist2 >= 1) {
int c2 = c - dist2;
int dist_max = max(dist, dist2);
v[r][c2] += max(0LL, a - 1LL * b * dist_max);
}
}
}
};
int ops;
cin >> ops;
for (int i = 1; i <= ops; i++) {
int r, c, a, b;
cin >> r >> c >> a >> b;
if (Inverse) {
swap(r, c);
}
for (int r2 = 1; r2 <= n; r2++) {
for (int c2 = 1; c2 <= m; c2++) {
int dist = max(abs(r - r2), abs(c - c2));
radiation[r2][c2] += max(0LL, a - 1LL * b * dist);
}
}
for (int dist = 0; r + dist <= n || r - dist >= 1 && a - dist * b >= 1; dist++) {
if (r + dist <= n) {
proc(dist, r + dist, c, a, b);
}
if (r - dist >= 1 && dist >= 1) {
proc(dist, r - dist, c, a, b);
}
}
}
assert(v == radiation);
{
/// transform the radiation in the form of prefix rectangle sum
for (int i = 1; i <= n; i++) {
ll cur = 0;
for (int j = 1; j <= m; j++) {
cur += radiation[i][j];
radiation[i][j] = radiation[i - 1][j] + cur;
}
}
}
int q;
cin >> q;
while (q--) {
int r1, c1, r2, c2;
cin >> r1 >> c1 >> r2 >> c2;
if (Inverse) {
swap(r1, c1);
swap(r2, c2);
}
ll total = radiation[r2][c2] - radiation[r1 - 1][c2] - radiation[r2][c1 - 1] + radiation[r1 - 1][c1 - 1];
ll area = (r2 - r1 + 1) * (c2 - c1 + 1);
cout << total / area + (total % area >= area - total % area) << "\n";
}
}
Compilation message
nuclearia.cpp: In function 'int main()':
nuclearia.cpp:62:55: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
62 | for (int dist = 0; r + dist <= n || r - dist >= 1 && a - dist * b >= 1; dist++) {
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
747 ms |
98156 KB |
Output is correct |
2 |
Correct |
64 ms |
2636 KB |
Output is correct |
3 |
Correct |
50 ms |
2288 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
778 ms |
98188 KB |
Output is correct |
2 |
Correct |
57 ms |
2608 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
722 ms |
39596 KB |
Output is correct |
2 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 6 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
744 ms |
42416 KB |
Output is correct |
2 |
Correct |
61 ms |
2636 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
331 ms |
100328 KB |
Output is correct |
2 |
Correct |
94 ms |
2912 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
820 ms |
41816 KB |
Output is correct |
2 |
Correct |
64 ms |
2764 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
54 ms |
80088 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
854 ms |
30032 KB |
Output is correct |
2 |
Runtime error |
1 ms |
468 KB |
Execution killed with signal 6 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1095 ms |
98116 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Execution timed out |
1082 ms |
98140 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
62 ms |
80076 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
60 ms |
80064 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
575 ms |
81748 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
921 ms |
80048 KB |
Execution killed with signal 6 |
2 |
Halted |
0 ms |
0 KB |
- |