Submission #1271215

#TimeUsernameProblemLanguageResultExecution timeMemory
1271215kustov_vadim_533Collecting Stamps 3 (JOI20_ho_t3)C++20
100 / 100
486 ms448904 KiB
#include <bits/stdc++.h> //#pragma GCC optimize("Ofast,O3,unroll-loops") //#pragma GCC target("avx2") using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; #define len(v) (int)((v).size()) const ll inf = 1e18; inline void solve() { int n, l; cin >> n >> l; vector<int> x(n + 1), t(n + 1); for (int i = 1; i <= n; ++i){ cin >> x[i]; } for (int i = 1; i <= n; ++i){ cin >> t[i]; } x[0] = 0; t[0] = -1; vector<vector<vector<vector<ll>>>> dp(n + 1, vector<vector<vector<ll>>>(n + 1, vector<vector<ll>>(n + 1, vector<ll>(2, inf)))); dp[0][0][0][0] = 0; auto dist = [&](int i, int j){ return min(abs(x[i] - x[j]), l - abs(x[i] - x[j])); }; for (int ln = 1; ln <= n; ++ln){ for (int l = 0; l <= n; ++l){ int r = (l + ln - 1) % (n + 1); for (int c = 0; c < n; ++c){ for (int f = 0; f < 2; ++f){ int ind = l * (!f) + r * f; { int nl = (l + n) % (n + 1); ll nv = dp[l][r][c][f] + dist(nl, ind); dp[nl][r][c + (nv <= t[nl])][0] = min(dp[nl][r][c + (nv <= t[nl])][0], nv); } { int nr = (r + 1) % (n + 1); ll nv = dp[l][r][c][f] + dist(nr, ind); dp[l][nr][c + (nv <= t[nr])][1] = min(dp[l][nr][c + (nv <= t[nr])][1], nv); } } } } } int ans = 0; for (int l = 0; l <= n; ++l){ for (int r = 0; r <= n; ++r){ for (int c = 0; c <= n; ++c){ for (int f = 0; f < 2; ++f){ if (dp[l][r][c][f] < inf){ ans = max(ans, c); } } } } } cout << ans << '\n'; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int t = 1; // cin >> t; while (t--) { 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...