Submission #370909

#TimeUsernameProblemLanguageResultExecution timeMemory
370909YeboiWatching (JOI13_watching)C++14
100 / 100
363 ms30188 KiB
#include <bits/stdc++.h> #define ll unsigned long long #define mod 998244353 #define rep(i,s) for(ll i=0; i<s ; i++) #define f(i,a,b) for(ll i(a); i<b ; i++) #define inf -pow(10,9) #define MAXN 100000 const ll INF = 1000000000; const ll N = 2005; const ll modi = 1000000007; const ll modi2= 1000000006; using namespace std; ll arr[N]; bool check(ll w , ll n, ll p , ll q){ ll dp[n + 1][p + 1]; rep(i,n){ ll l = 0; ll r = 0; while(arr[i] - arr[l] >= w){ l++; } while(arr[i] - arr[r] >= 2*w){ r++; } rep(j , p + 1){ if(j == 0){ if(r == 0){ dp[i][j] = 1; } else{ dp[i][j] = dp[r-1][j] + 1; } } else{ if(l == 0){ dp[i][j] = 0; } else if(r == 0){ dp[i][j] = min(dp[l-1][j-1], (ll)1); } else{ dp[i][j] = min(dp[l-1][j-1], dp[r-1][j] + 1); } } } } if(dp[n-1][p] <= q){ return true; } else{ return false; } } int main(){ ll n,p,q; cin >> n >> p >> q; rep(i,n){ cin >> arr[i]; } sort(arr,arr+n); if(n <= p + q){ cout << 1 << endl; } else{ ll l = 1; ll r = 1000000010; while(l < r){ ll mid = (l+r)/2; if(check(mid,n,p,q)){ r = mid; } else{ l = mid + 1; } } cout << l << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...