二分与贪心-Aggressive cows(算法基础 第9周)

问题描述:
二分与贪心-Aggressive cows(算法基础 第9周)_第1张图片
分析
N个畜栏,C头牛;每个畜栏的位置为xi;求使牛之间相隔最远的最小距离。
主要还是二分的思想;最后选择l还是r值作为结果的时候需要自己分析一下。
源码

#include <iostream>
#include <vector>
#include <stdio.h> 
#include <algorithm>
using namespace std;

int N, C;
int l, r, mid;
//畜栏
vector<int> stalls;

bool check(int ans) {
    int count=0;
    int next_place=stalls[0];
    for (int i=0; i<stalls.size(); i++){
        if (stalls[i] >= next_place) {
            count++;
            next_place =stalls[i]+ans;
        }
    }
    if (count >= C) return true;
    else return false;
}

int main() {
    cin >> N >> C;  
    int s;
    //输入数据
    for (int i=0; i<N; i++) {
        scanf("%d", &s);
        stalls.push_back(s);
    }
    sort(stalls.begin(), stalls.end());
    int l=1;
    int r=(stalls[stalls.size()-1]-stalls[0])/(C-1);
    int mid=0;
    //先判断是否为空
    while(l<=r) {
        mid=(l+r)/2;   
        if (check(mid)) l=mid+1;
        else r=mid-1;
    }
    cout << r << endl;
    return 0;
}

你可能感兴趣的:(二分与贪心-Aggressive cows(算法基础 第9周))