제출 #747463

#제출 시각아이디문제언어결과실행 시간메모리
747463tch1cherinCollecting Stamps 3 (JOI20_ho_t3)C++17
100 / 100
979 ms448796 KiB
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9 + 1;

void chmin(int& a, int b) {
  a = min(a, b);
}

void solve() {
  int N, P;
  cin >> N >> P;
  vector<int> X(N), T(N);
  for (int &v : X) {
    cin >> v;
  }
  for (int &v : T) {
    cin >> v;
  }
  X.insert(X.begin(), 0);
  T.insert(T.begin(), 0);
  N++;
  vector dp(N, vector(N, vector(N, vector(2, INF))));
  dp[0][0][0][0] = 0;
  for (int len = 0; len < N - 1; len++) {
    for (int L = 0; L < N; L++) {
      int R = (L + len) % N;
      for (int ans = 0; ans < N; ans++) {
        for (int w = 0; w < 2; w++) {
          int time = dp[L][R][ans][w];
          if (w == 0) {
            {
              int delta = (X[L] - X[(L + N - 1) % N] + P) % P;
              int add = time + delta <= T[(L + N - 1) % N];
              chmin(dp[(L + N - 1) % N][R][ans + add][0], time + delta); 
            }
            {
              int delta = (X[(R + 1) % N] - X[L] + P) % P;
              int add = time + delta <= T[(R + 1) % N];
              chmin(dp[L][(R + 1) % N][ans + add][1], time + delta);
            }
          } else {
            {
              int delta = (X[R] - X[(L + N - 1) % N] + P) % P;
              int add = time + delta <= T[(L + N - 1) % N];
              chmin(dp[(L + N - 1) % N][R][ans + add][0], time + delta);
            }
            {
              int delta = (X[(R + 1) % N] - X[R] + P) % P;
              int add = time + delta <= T[(R + 1) % N];
              chmin(dp[L][(R + 1) % N][ans + add][1], time + delta);
            }
          }
        }
      }
    } 
  }
  int res = 0;
  for (int L = 0; L < N; L++) {
    for (int R = 0; R < N; R++) {
      for (int ans = 0; ans < N; ans++) {
        for (int w = 0; w < 2; w++) {
          if (dp[L][R][ans][w] != INF) {
            res = max(res, ans);
          }
        }
      } 
    }
  }
  cout << res << "\n";
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...