Submission #958885

#TimeUsernameProblemLanguageResultExecution timeMemory
958885MinaRagy06Shortcut (IOI16_shortcut)C++17
0 / 100
2 ms8792 KiB
#include <bits/stdc++.h> #include "shortcut.h" #ifdef MINA #include "grader.cpp" #endif using namespace std; #define ll long long const int N = 3005; ll v1[N][N], v2[N][N], v3[N][N], v4[N][N]; ll find_shortcut(int n, vector<int> l, vector<int> a, int c) { reverse(l.begin(), l.end()), l.push_back(0), reverse(l.begin(), l.end()), l.push_back(0); reverse(a.begin(), a.end()), a.push_back(-1), reverse(a.begin(), a.end()); ll prf[n + 2]{}; for (int i = 2; i <= n; i++) { prf[i] = prf[i - 1] + l[i - 1]; } auto check = [&] (ll t) { for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { if (prf[j] - prf[i] + a[i] + a[j] <= t) { v1[i][j] = v2[i][j] = v3[i][j] = v4[i][j] = 1e18; continue; } v1[i][j] = t + prf[j] - prf[i] - a[i] - a[j]; v2[i][j] = t - prf[j] + prf[i] - a[i] - a[j]; v3[i][j] = t + prf[i] + prf[j] - a[i] - a[j]; v4[i][j] = t - prf[i] - prf[j] - a[i] - a[j]; } } for (int x = 1; x <= n; x++) { for (int y = x + 1; y <= n; y++) { ll mn1 = 1e18, mn2 = 1e18, mn3 = 1e18, mn4 = 1e18; ll len = prf[y] - prf[x] + c; for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { if (x <= i && j <= y) { mn1 = min(mn1, v1[i][j]); } else if (i < x && y < j) { mn2 = min(mn2, v2[i][j]); } else if (i <= x && x <= j && j <= y) { mn3 = min(mn3, v3[i][j]); } else if (x <= i && i <= y && y <= j) { mn4 = min(mn4, v4[i][j]); } } } if (len <= mn1 && -(prf[y] - prf[x]) + c <= mn2 && len + 2 * prf[x] <= mn3 && len - 2 * prf[y] <= mn4) { return 1; } } } return 0; }; ll s = 0, e = 1ll << 42; while (s <= e) { ll md = (s + e) >> 1; if (check(md)) { e = md - 1; } else { s = md + 1; } } return s; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...