제출 #1307623

#제출 시각아이디문제언어결과실행 시간메모리
1307623JelaByteEngineer구경하기 (JOI13_watching)C++20
0 / 100
1098 ms327680 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; bool ok (int mid, int n, int p, int q, vector <ll> &niz) { vector <int> poslm(n), poslv(n); for (int i=0; i<n; i++) { poslm[i]=lower_bound(niz.begin(), niz.end(), niz[i]+mid)-niz.begin(); poslv[i]=lower_bound(niz.begin(), niz.end(), niz[i]+2*mid)-niz.begin(); } vector <vector <int>> dp(q+1, vector <int> (n+1, 1e9)); dp[0][0]=0; for (int i=0; i<n; i++) { for (int j=0; j<=q; j++) { if (dp[j][i]==1e9) continue; dp[j][poslm[i]]=min(dp[j][poslm[i]], dp[j][i]+1); if (j<q) dp[j+1][poslv[i]]=min(dp[j+1][poslv[i]], dp[j][i]); } } for (int i=0; i<=q; i++) { if (dp[i][n]<=p) return true; } return false; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, p, q; cin>>n>>p>>q; vector <ll> niz(n); for (int i=0; i<n; i++) { cin>>niz[i]; } sort (niz.begin(), niz.end()); int ans=1e9; int l=1, r=1e9; while (l<=r) { int mid=l+(r-l)/2; if (ok(mid, n, p, q, niz)) { r=mid-1; ans=min(ans, mid); } else { l=mid+1; } } cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...