답안 #604618

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
604618 2022-07-25T08:12:40 Z Plurm Uplifting Excursion (BOI22_vault) C++11
5 / 100
5000 ms 12468 KB
#include <bits/stdc++.h>
using namespace std;

template <typename T> class negarr {
private:
  T data[505000 * 2 + 1];

public:
  negarr() { memset(data, 0, sizeof(data)); }
  void reset() { fill(data, data + 505000 * 2 + 1, -1000000000); }
  inline T &operator[](int i) { return data[i + 505000]; }
};

class pstate {
public:
  int x, y;
  pstate(int x, int y) : x(x), y(y) {}
  friend bool operator<(const pstate &a, const pstate &b) {
    return a.x + a.y < b.x + b.y;
  }
};
class nstate {
public:
  int x, y;
  nstate(int x, int y) : x(x), y(y) {}
  friend bool operator<(const nstate &a, const nstate &b) {
    return a.y - a.x < b.y - b.x;
  }
};
negarr<int> a, knapsack;
int main() {
  int m;
  long long l;
  cin >> m >> l;
  const int BOUND = m * (m + 1) / 2 * 100;
  if (l > BOUND || l < -BOUND) {
    printf("impossible\n");
    return 0;
  }
  knapsack.reset();
  knapsack[0] = 0;
  for (int i = -m; i <= m; i++) {
    cin >> a[i];
    negarr<int> tmp;
    tmp.reset();
    if (i == 0) {
      for (int id = -BOUND; id <= BOUND; id++) {
        knapsack[id] += a[i];
      }
    } else {
      if (i > 0) {
        vector<priority_queue<nstate, vector<nstate>>> pq(i);
        for (int id = -BOUND; id <= BOUND; id++) {
          int mod = id % i;
          if (mod < 0)
            mod += i;
          int xx = (id + BOUND) / i;
          while (!pq[mod].empty() && xx - pq[mod].top().x > a[i])
            pq[mod].pop();
          while (!pq[mod].empty() && pq[mod].top() < nstate(xx, knapsack[id]))
            pq[mod].pop();
          pq[mod].push({xx, knapsack[id]});
          if (!pq[mod].empty()) {
            nstate t = pq[mod].top();
            tmp[id] = max(tmp[id], t.y - t.x + xx);
          }
        }
      } else if (i < 0) {
        vector<priority_queue<pstate, vector<pstate>>> pq(-i);
        for (int id = BOUND; id >= -BOUND; id--) {
          int mod = id % (-i);
          if (mod < 0)
            mod += (-i);
          int xx = (id + BOUND) / (-i);
          while (!pq[mod].empty() && pq[mod].top().x - xx > a[i])
            pq[mod].pop();
          while (!pq[mod].empty() && pq[mod].top() < pstate(xx, knapsack[id]))
            pq[mod].pop();
          pq[mod].push({xx, knapsack[id]});
          if (!pq[mod].empty()) {
            pstate t = pq[mod].top();
            knapsack[id] = max(knapsack[id], t.y + t.x - xx);
          }
        }
      }
      for (int id = -BOUND; id <= BOUND; id++) {
        knapsack[id] = max(knapsack[id], tmp[id]);
      }
    }
  }
  if (knapsack[l] >= 0)
    printf("%d\n", knapsack[l]);
  else
    printf("impossible\n");
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 12116 KB Output is correct
2 Correct 15 ms 12148 KB Output is correct
3 Correct 14 ms 12152 KB Output is correct
4 Correct 48 ms 12136 KB Output is correct
5 Correct 6 ms 12116 KB Output is correct
6 Correct 1383 ms 12200 KB Output is correct
7 Correct 1032 ms 12208 KB Output is correct
8 Correct 1448 ms 12224 KB Output is correct
9 Correct 1570 ms 12212 KB Output is correct
10 Correct 826 ms 12152 KB Output is correct
11 Correct 778 ms 12152 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 12116 KB Output is correct
2 Correct 15 ms 12148 KB Output is correct
3 Correct 14 ms 12152 KB Output is correct
4 Correct 48 ms 12136 KB Output is correct
5 Correct 6 ms 12116 KB Output is correct
6 Correct 1383 ms 12200 KB Output is correct
7 Correct 1032 ms 12208 KB Output is correct
8 Correct 1448 ms 12224 KB Output is correct
9 Correct 1570 ms 12212 KB Output is correct
10 Correct 826 ms 12152 KB Output is correct
11 Correct 778 ms 12152 KB Output is correct
12 Correct 11 ms 12116 KB Output is correct
13 Correct 13 ms 12116 KB Output is correct
14 Correct 12 ms 12116 KB Output is correct
15 Correct 36 ms 12148 KB Output is correct
16 Correct 6 ms 12116 KB Output is correct
17 Correct 1369 ms 12176 KB Output is correct
18 Correct 948 ms 12308 KB Output is correct
19 Correct 1203 ms 12244 KB Output is correct
20 Correct 1395 ms 12212 KB Output is correct
21 Correct 662 ms 12268 KB Output is correct
22 Correct 684 ms 12156 KB Output is correct
23 Correct 5 ms 12116 KB Output is correct
24 Execution timed out 5055 ms 12468 KB Time limit exceeded
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 12156 KB Output is correct
2 Incorrect 5 ms 12116 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 12156 KB Output is correct
2 Incorrect 5 ms 12116 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 12156 KB Output is correct
2 Incorrect 5 ms 12116 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 12116 KB Output is correct
2 Correct 15 ms 12148 KB Output is correct
3 Correct 14 ms 12152 KB Output is correct
4 Correct 48 ms 12136 KB Output is correct
5 Correct 6 ms 12116 KB Output is correct
6 Correct 1383 ms 12200 KB Output is correct
7 Correct 1032 ms 12208 KB Output is correct
8 Correct 1448 ms 12224 KB Output is correct
9 Correct 1570 ms 12212 KB Output is correct
10 Correct 826 ms 12152 KB Output is correct
11 Correct 778 ms 12152 KB Output is correct
12 Correct 29 ms 12156 KB Output is correct
13 Incorrect 5 ms 12116 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 12156 KB Output is correct
2 Incorrect 5 ms 12116 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 12116 KB Output is correct
2 Correct 15 ms 12148 KB Output is correct
3 Correct 14 ms 12152 KB Output is correct
4 Correct 48 ms 12136 KB Output is correct
5 Correct 6 ms 12116 KB Output is correct
6 Correct 1383 ms 12200 KB Output is correct
7 Correct 1032 ms 12208 KB Output is correct
8 Correct 1448 ms 12224 KB Output is correct
9 Correct 1570 ms 12212 KB Output is correct
10 Correct 826 ms 12152 KB Output is correct
11 Correct 778 ms 12152 KB Output is correct
12 Correct 11 ms 12116 KB Output is correct
13 Correct 13 ms 12116 KB Output is correct
14 Correct 12 ms 12116 KB Output is correct
15 Correct 36 ms 12148 KB Output is correct
16 Correct 6 ms 12116 KB Output is correct
17 Correct 1369 ms 12176 KB Output is correct
18 Correct 948 ms 12308 KB Output is correct
19 Correct 1203 ms 12244 KB Output is correct
20 Correct 1395 ms 12212 KB Output is correct
21 Correct 662 ms 12268 KB Output is correct
22 Correct 684 ms 12156 KB Output is correct
23 Correct 5 ms 12116 KB Output is correct
24 Execution timed out 5055 ms 12468 KB Time limit exceeded
25 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 29 ms 12156 KB Output is correct
2 Incorrect 5 ms 12116 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 12116 KB Output is correct
2 Correct 15 ms 12148 KB Output is correct
3 Correct 14 ms 12152 KB Output is correct
4 Correct 48 ms 12136 KB Output is correct
5 Correct 6 ms 12116 KB Output is correct
6 Correct 1383 ms 12200 KB Output is correct
7 Correct 1032 ms 12208 KB Output is correct
8 Correct 1448 ms 12224 KB Output is correct
9 Correct 1570 ms 12212 KB Output is correct
10 Correct 826 ms 12152 KB Output is correct
11 Correct 778 ms 12152 KB Output is correct
12 Correct 11 ms 12116 KB Output is correct
13 Correct 13 ms 12116 KB Output is correct
14 Correct 12 ms 12116 KB Output is correct
15 Correct 36 ms 12148 KB Output is correct
16 Correct 6 ms 12116 KB Output is correct
17 Correct 1369 ms 12176 KB Output is correct
18 Correct 948 ms 12308 KB Output is correct
19 Correct 1203 ms 12244 KB Output is correct
20 Correct 1395 ms 12212 KB Output is correct
21 Correct 662 ms 12268 KB Output is correct
22 Correct 684 ms 12156 KB Output is correct
23 Correct 5 ms 12116 KB Output is correct
24 Execution timed out 5055 ms 12468 KB Time limit exceeded
25 Halted 0 ms 0 KB -