Submission #307351

#TimeUsernameProblemLanguageResultExecution timeMemory
307351limabeansWatching (JOI13_watching)C++17
50 / 100
100 ms2000 KiB
#include <bits/stdc++.h> using namespace std; template<typename T> void out(T x) { cout << x << endl; exit(0); } #define watch(x) cout << (#x) << " is " << (x) << endl using ll = long long; const int maxn = 1e6 + 5; int n, small, large; int a[maxn]; map<vector<int>, bool> dp; bool solve(int w, int i, int j, int k) { if (j>small) return false; if (k>large) return false; if (i==n) return true; vector<int> key = {i,j,k}; if (dp.count(key)) return dp[key]; bool &res = dp[key] = false; // use small { int to = lower_bound(a,a+n,a[i]+w)-a; res |= solve(w, to, j+1, k); } // use large { int to = lower_bound(a,a+n,a[i]+2*w)-a; res |= solve(w, to, j, k+1); } return res; } bool test(int w) { dp.clear(); return solve(w, 0, 0, 0); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>small>>large; assert(n<=100); if (small>=n || large>=n) out(1); for (int i=0; i<n; i++) { cin>>a[i]; } sort(a,a+n); int lo=0; int hi=(int)1e9 + 20; while (hi-lo>1) { int mid=(lo+hi)/2; if (test(mid)) { hi = mid; } else { lo = mid; } } cout<<hi<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...