Submission #112729

#TimeUsernameProblemLanguageResultExecution timeMemory
112729brcodeWatching (JOI13_watching)C++14
100 / 100
298 ms16248 KiB
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXN = 2010;
//const int MAXP = 1e5+5;
/*

*/
vector<int> arr;
int dp[MAXN][MAXN];
int n,p,q;
bool check(int x){
    for(int i=0;i<=n;i++){
        for(int j=0;j<=n;j++){
            dp[i][j] = 1e9;
        }
    }
    dp[0][0] = 0;
    for(int i=1;i<=n;i++){
        int curr = arr[i];
        int target1 = arr[i] - x+1;

        int pos1 = lower_bound(arr.begin(),arr.end(),target1)-arr.begin()-1;
        int target2 = arr[i]-(2*x)+1;
        int pos2 = lower_bound(arr.begin(),arr.end(),target2)-arr.begin()-1;
        if(x == 14){
          //  cout<<target1<<" "<<pos2<<endl;
        }
       // 
        for(int j=0;j<=p;j++){
            if(j){
                dp[i][j] = min(dp[i][j],dp[pos1][j-1]);
            }
            dp[i][j] = min(dp[i][j],dp[pos2][j]+1);
        }
    }
    for(int i=0;i<=p;i++){
        //cout<<dp[n][i]<<endl;
        if(dp[n][i]<=q){
            return true;
        }
    }
    return false;
}
int main() {
    
    cin>>n>>p>>q;
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        arr.push_back(x);
    }
    if(p+q>=n){
        cout<<1<<endl;
        return 0;
    }
    arr.push_back(-1000000000);
    sort(arr.begin(),arr.end());
    int l = 0;
    int r = 1e9;
    int ans = 0;
    while(l<=r){
        int mid = (l+r)/2;
        
        if(check(mid)){
            ans = mid;
            r = mid-1;
        }else{
            l = mid+1;
        }
    }
    cout<<ans<<endl;
}

Compilation message (stderr)

watching.cpp: In function 'bool check(int)':
watching.cpp:21:13: warning: unused variable 'curr' [-Wunused-variable]
         int curr = arr[i];
             ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...