プログラマーマットC++池


[プログラマー]踏み台.
アイデア
  • はこの探索を使用します.
  • 方法
  • 石の位置をsortで昇順ソート
  • 分の探索を利用して、石を1つ置くたびに、一番近い石からの距離をmidと比較し、もっと小さくなればcnt(石を抜く回数)
  • を加える.
  • cnt>nの場合、end=mid-1で目標距離
  • を短縮する.
  • cnt<=nの場合、石を十分に置くことができるので、start=mid+1で距離を増やします.
  • #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    int solution(int distance, vector<int> rocks, int n) {
        int answer = 0;
        sort(rocks.begin(),rocks.end());
        
        int start = 0;
        int end = distance;
        while(start <= end){
            int mid = (start + end) / 2;
            int cnt = 0;
            int left = 0;
            
            for(int i=0;i<rocks.size();i++){
                if(rocks[i] - left >= mid) left = rocks[i];
                else cnt++;
            }
            
            if(cnt > n) {
                end = mid - 1;
            }
            else{
                answer = max(answer,mid);
                start = mid + 1;
            }
        }
        
        return answer;
    }
    評価
    この探索−パラメータ測定を知っていれば5分,知らなければ1時間の問題に悩む.
    最近,符号化テストと符号化の課題を解く際にパラメータ探索に関する多くの問題が発生している.
    パラメトリックサーチは,二分探索であることを認識し,アイデアがあれば実現自体が非常に容易であるため,極めて速い時間でコードを記述することができる.
    この探索であることに気づいても,アイデアが出なければ数時間の思考はパラメトリック探索の問題であるべきである.
    これらしか体験できず、特に10億を超える範囲が非常に広い場合は、二分探索とパラメータ研究であることを疑う必要があります.