Submission #570068

# Submission time Handle Problem Language Result Execution time Memory
570068 2022-05-28T14:01:08 Z 600Mihnea Nuclearia (CEOI15_nuclearia) C++17
17 / 100
1000 ms 100328 KB
#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++) {
      |                                         ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory 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
# Verdict Execution time Memory Grader output
1 Correct 778 ms 98188 KB Output is correct
2 Correct 57 ms 2608 KB Output is correct
# Verdict Execution time Memory 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 -
# Verdict Execution time Memory Grader output
1 Correct 744 ms 42416 KB Output is correct
2 Correct 61 ms 2636 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 331 ms 100328 KB Output is correct
2 Correct 94 ms 2912 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 820 ms 41816 KB Output is correct
2 Correct 64 ms 2764 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 54 ms 80088 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory 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 -
# Verdict Execution time Memory Grader output
1 Execution timed out 1095 ms 98116 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 1082 ms 98140 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 62 ms 80076 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 60 ms 80064 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 575 ms 81748 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 921 ms 80048 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -