Submission #77294

#TimeUsernameProblemLanguageResultExecution timeMemory
77294MohamedAhmed0Watching (JOI13_watching)C++14
0 / 100
236 ms31980 KiB
#include <bits/stdc++.h> using namespace std; long long dp[2001][2001] , arr[2001]; long long n , p , q ; long long check(long long idx , long long r , long long re , long long x , long long covered) { if(idx == n) return 1 ; long long &ret = dp[idx][r] ; if(ret != -1) return ret ; if(r + re >= n-1 - idx + (arr[idx] > covered)) return ret = 1 ; ret = 0 ; if(arr[idx] <= covered) ret = check(idx+1 , r , re , x , covered); else { if(r == 0 && re == 0) return 0 ; if(r != 0) ret = check(idx+1 , r-1 , re , x , arr[idx] + x-1); if(re != 0) ret = max(ret , check(idx+1 , r , re-1 , x , arr[idx] + x*2-1)); } return ret ; } int main() { cin>>n>>p>>q ; if(p+q >= n) return cout<<1 , 0 ; long long MAX = 0 ; for(long long i = 0 ; i < n ; ++i) { cin>>arr[i] ; MAX = max(MAX , arr[i]); } //sort(arr , arr + n + 1); sort(arr , arr + n); long long l = 1 , r = MAX , ans = 1e15; while(l <= r) { memset(dp , -1 , sizeof(dp)); long long mid = (l + r) / 2 ; if(check(0 , p , q , mid , 0)) r = mid-1 , ans = min(ans , mid); else l = mid+1; } return cout<<ans<<"\n" , 0 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...