Luo Gu P1824 attack cows greedy + half

topic

The closest distance by half enumeration, verification by greedy closest distance

#include <iostream>
#include <cstdio>
#include <cmath>
#include <iomanip>
#include <queue>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long ll;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int N, C;
    cin >> N >> C;
    int pos[N + 1];
    for (int i = 0; i < N; i++) {
        cin >> pos[i];
    }
    sort(pos, pos + N);
    int L = pos[1] - pos[0], R = pos[N - 1] - pos[0], ans = -1;//L和R分别为最近距离的
    while (L <= R) {										   //最小可能和最大可能
        int mid = L + (R - L) / 2;
        int last = -mid, cnt = 0;//last初始化为-mid, 用于第一个隔间的计算
        for (int i = 0; i < N; i++) {
            if (pos[i] - last >= mid) {
                cnt++;
                last = pos[i];
            }
        }
        if (cnt >= C) {
            ans = max(ans, mid);//取最大值
            L = mid + 1;
        }
        else {
            R = mid - 1;
        }
    }
    cout << ans << endl;
    return 0;
}
Published 35 original articles · won praise 0 · Views 1965

Guess you like

Origin blog.csdn.net/weixin_43971049/article/details/104215507