雑記・まとめ

個人的な備忘録

typical90a

2月くらいにある社内のコードコンテストに向けて典型問題復習中

 

競プロとかちゃんとやってたの7年ぶり?

その頃も別に特段強くはなかったけど久しぶりにやったら絶望.

 

問題見た瞬間になんかLでかいけどDPとか行けんのか?

って思って少し考えたけどギブ

 

なるほど二分探索か

わかってしまえば まぁなんとか.

 

#include<bits/stdc++.h>
using namespace std;

    int n, l;
    int k;
    int a[100009] = {0};
   
int solve(int x){

    int p = 0;
    int cnt = 0;
    for(int i=0;i<n;i++){
        if(a[i] - p >= x){
            p = a[i];
            cnt++;
        }
    }

    if(l - p < x) cnt--;

    if(cnt >= k) return true;
    else return false;

}

int main(){

    cin >> n >> l;
    cin >> k;

    for(int i=0;i<n;i++) cin >> a[i];

    int ok = -1;
    int ng = l;

    while(ng - ok > 1){
        int mid = (ok + ng)/2;
        if(solve(mid)) ok = mid;
        else ng = mid;
    }

    cout << ok << endl;

}