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...