제출 #1251728

#제출 시각아이디문제언어결과실행 시간메모리
1251728tte0구경하기 (JOI13_watching)C++20
100 / 100
221 ms31708 KiB
// Author: Teoman Ata Korkmaz #include <bits/stdc++.h> #define int int_fast64_t using namespace std; /////////////////////////////////////////////////////////// int n,k,b; vector<int> v; vector<vector<int>> dp; inline bool __f(int w){ dp.assign(n+2,vector<int>(b+2,1e9)); dp[0][0]=0; for(int i=0;i<n;i++){ int it_k=lower_bound(v.begin(),v.end(),v[i]+w)-v.begin(); int it_b=lower_bound(v.begin(),v.end(),v[i]+2*w)-v.begin(); for(int j=0;j<=b;j++){ dp[it_k][j]=min(dp[it_k][j],dp[i][j]+1); dp[it_b][j+1]=min(dp[it_b][j+1],dp[i][j]); } } /*cerr<<"w:"<<w<<endl; for(auto t:dp){ cerr<<"dp:"; for(auto i:t)cerr<<i<<","; cerr<<endl; }cerr<<endl;*/ for(int j=0;j<=b;j++)if(dp[n][j]<=k)return true; return false; } signed main(void){ cin>>n>>k>>b; v.resize(n); for(auto& i:v)cin>>i; sort(v.begin(),v.end()); v.resize(unique(v.begin(),v.end())-v.begin()); n=v.size(); b=min(n,b); //cerr<<"v:";for(auto i:v)cerr<<i<<",";cerr<<endl; int l=1,r=1e9; while(l<r){ int m=(l+r)>>1; if(!__f(m))l=m+1; else r=m; } cout<<l<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...