Submission #856593

#TimeUsernameProblemLanguageResultExecution timeMemory
856593NeroZeinCollecting Stamps 3 (JOI20_ho_t3)C++17
100 / 100
101 ms66140 KiB
#include "bits/stdc++.h"
using namespace std;
 
#ifdef Nero
#include "Deb.h"
#else
#define deb(...)
#endif
 
const int N = 203;
const int INF = 0x3f3f3f3f;
 
int a[N], t[N]; 
int dp[N][N][N][2]; 
 
int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, p;
  cin >> n >> p;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
  }
  for (int i = 1; i <= n; ++i) {
    cin >> t[i];
  }
  t[0] = -1; 
  memset(dp, INF, sizeof dp); 
  int ans = 0; 
  dp[0][0][0][0] = 0; 
  dp[0][0][0][1] = 0; 
  for (int c = 0; c <= n; ++c) {
    for (int l = n, tc = 0; ; l = (l - 1 < 0 ? n : l - 1)) {
      tc += l == n;
      if (tc == 3) break; 
      for (int r = 0; r <= n; ++r) {
        for (int il = 0; il < 2; ++il) {
          if (dp[c][l][r][il] == INF) {
            continue;
          }
          ans = max(ans, c); 
          int cur = il ? l : r;
          int ct = dp[c][l][r][il]; 
          //deb(c) deb(l) deb(r) deb(il) deb(ct) cout << '\n';
          int nl = (l == 0 ? n : l - 1); 
          int nr = r + 1; 
          int ndl = (l == 0 ? a[cur] + p - a[n] : il ? a[cur] - a[l - 1] : a[cur] + p - a[l - 1]); 
          int ndr = (l > r && il ? p - a[cur] + a[r + 1] : a[r + 1] - a[cur]); 
          if (nl != r) {
            if (ndl + ct <= t[nl]) {
              dp[c + 1][nl][r][1] = min(dp[c + 1][nl][r][1], ct + ndl);               
            }
            dp[c][nl][r][1] = min(dp[c][nl][r][1], ct + ndl); 
          }
          if (nr <= n && nr != l) {
            if (ndr + ct <= t[nr]) {
              dp[c + 1][l][nr][0] = min(dp[c + 1][l][nr][0], ct + ndr);               
            } 
            dp[c][l][nr][0] = min(dp[c][l][nr][0], ct + ndr);
          }
        }
      }
    }
  }
  cout << ans << '\n'; 
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...