Submission #1251812

#TimeUsernameProblemLanguageResultExecution timeMemory
1251812efex12Watching (JOI13_watching)C++20
50 / 100
583 ms327680 KiB
#include<bits/stdc++.h> #define int long long #define pint pair<int,int> #define N 2005 #define pb push_back #define ff first #define ss second #define mod 1000000007 #define INF 1000000005 #define pu push using namespace std; int n,a,b; int arr[N],num; int dp[N][N]; pint go[N]; inline int f(int ind,int x) { if(x<0) return INF; if(dp[ind][x]!=-1) return dp[ind][x]; if(ind==n) return 0; if(go[ind].ff==0) { int goa=lower_bound(arr,arr+n,arr[ind]+num)-arr; int gob=lower_bound(arr,arr+n,arr[ind]+2*num)-arr; go[ind].ff=goa; go[ind].ss=gob; } return dp[ind][x]=min(f(go[ind].ff,x-1),f(go[ind].ss,x)+1); } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin>>n>>a>>b; for(int i=0;i<n;i++) { cin>>arr[i]; } sort(arr,arr+n); if((a+b)>=n) { cout<<"1\n"; return 0; } int l=0,r=1000000002/(a+b)+100; int ans=r; while(l<=r) { memset(dp,-1,sizeof(dp)); memset(go,0,sizeof(go)); int mid=(l+r)/2; num=mid; if(f(0,a)<=b) { ans=min(ans,mid); r=mid-1; } else { l=mid+1; } } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...