제출 #1336005

#제출 시각아이디문제언어결과실행 시간메모리
1336005zhehanBikeparking (EGOI24_bikeparking)C++20
0 / 100
65 ms9712 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

signed main() {
  int n;
  cin >> n;
  vector<int> x(n, 0), y(n, 0);
  for (int i = 0; i < n; ++i) {
    cin >> x[i];
  }
  for (int i = 0; i < n; ++i) {
    cin >> y[i];
  }
  vector<int> prex(n, 0);
  prex[0] = x[0];
  for (int i = 1; i < n; ++i) {
    prex[i] = prex[i - 1] + x[i];
  }
  vector<int> spots(n + 1, 0);
  spots[n] = prex[n - 1];
  int ans = 0;
  int taken = 0;
  for (int i = n - 1; i > 0; --i) {
    spots[i] = min(spots[i + 1], prex[i - 1]);
    int t = min(spots[i], y[i]);
    ans += t;
    taken += t;
    y[i] -= t;
    if (i < n - 1) {
      spots[i] = min(prex[i] - t, spots[i + 1]);
      if (spots[i] > 0) {
        int a = min(y[i], spots[i]);
        y[i] -= a;
        taken += a;
        spots[i] -= a;
      }
    }
    if (taken == prex[n - 2]) {
      break;
    }
  }
  spots[0] = spots[1];
  if (spots[0] > 0) {
    int a = min(y[0], spots[0]);
    y[0] -= a;
    taken += a;
  }
  y[n - 1] = 0;
  for (int i = 0; i < n; ++i) {
    ans -= y[i];
  }
  cout << ans << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...