Submission #1001873

#TimeUsernameProblemLanguageResultExecution timeMemory
1001873vjudge1Watching (JOI13_watching)C++17
0 / 100
1098 ms860 KiB
#pragma GCC optimize("Ofast") #include"bits/stdc++.h" #define int long long using namespace std; const int sz = 2e3 + 6; const int inf = 1e18; vector<vector<int>> aj[sz]; int nw[sz], nww[sz]; int n, p, q; int a[sz]; bool f; void dfs(int v, int cl, int cr) { if (cl > p || cr > q) return; if (v == n + 1) { f |= (cl <= p && cr <= q); } else { for (auto& u : aj[v]) { if(u[1] < nw[v] || u[2] < nww[v]) { dfs(u[0], cl + u[1], cr + u[2]); } if (f) return; nw[v] = u[1], nww[v] = u[2]; } } } bool che(int mi) { 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; } 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; 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...