Submission #1002017

#TimeUsernameProblemLanguageResultExecution timeMemory
1002017coolboy19521Watching (JOI13_watching)C++17
100 / 100
623 ms64832 KiB
#pragma GCC optimize("Ofast") #include"bits/stdc++.h" #define int long long using namespace std; const int sz = 2e3 + 20; const int inf = 1e18; vector<vector<int>> aj[sz]; int nw[sz], nww[sz]; int n, p, q; int vi[sz][sz]; int vs[sz][sz]; int a[sz]; bool f; void dfs(int v, int cl, int cr) { vi[v][cl]=min(vi[v][cl], cr); vs[v][cr]=min(vs[v][cr], cl); if (cl > p || cr > q) return; if (v == n + 1) { f |= (cl <= p && cr <= q); } else { for (auto& u : aj[v]) { if(cr+u[2]>=vi[u[0]][cl+u[1]] || cl+u[1]>=vs[u[0]][cr+u[2]]) continue; if(u[1] <= nw[v] || u[2] <= nww[v]) { dfs(u[0], cl + u[1], cr + u[2]); } if (f) return; } } } bool che(int mi) { // map<vector<int>,bool>vi; for (int i = 1; i <= n; i ++) { aj[i].clear(); int d = lower_bound(a + 1, a + n + 1, a[i] + mi) - &a[i]; int c = lower_bound(a + 1, a + n + 1, a[i] + 2 * mi) - &a[i]; aj[i].push_back({i + d, 1, 0}); aj[i].push_back({i + c, 0, 1}); nw[i] = nww[i] = inf; } fill_n(&vi[0][0], sz * sz, INT_MAX); fill_n(&vs[0][0], sz * sz, INT_MAX); f = false; dfs(1, 0, 0); return f; } signed main() { cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> p >> q; for (int i = 1; i <= n; i ++) { cin >> a[i]; } sort(a + 1, a + n + 1); a[n + 1] = inf; int le, ri; le = 0, ri = (a[n] - a[1]) / (p + q) + 10; // cout << ri << '\n'; while (1 < ri - le) { int mi = le + (ri - le) / 2; if (che(mi)) { ri = mi; } else { le = mi; } } cout << ri << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...