Aggressive cows (尺取)

这题就是给出N个点,然后让你把C头牛分别放进去,它们之间距离(平均)越大越好,因为让你输出的是它们之间距离最小的长度。

#include<math.h>
#include<algorithm>
#include<time.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<map>
#include<list>
#include<string>
#include<queue>
#include<set>
#include<vector>
#include<stack>
#include<limits>
#define re register
#define iosgo() std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define run(i,n) for (int i = 1; i <= n; i++)
#define cin std::cin
#define cout std::cout
#define ll long long
#define endl "\n"
using namespace std;
typedef pair<int, int>pll;
const int N = 2e5 + 10;
pll cc[N];
int h[150][150];
ll x[N], y[N], s[N];
ll gcd(ll a, ll b)
{
    return b ? gcd(b, a % b) : a;
}
int a[N];
int n, c;
bool find(int x)
{
    int ans = 1, t = a[0];
    for (int i = 1; i < n; i++)
    {
        if (a[i] - t >= x)
        {
            ans++;
            t = a[i];
            if (ans >= c)
            {
                return true;
            }
        }
    }
    return false;
}
int solve()
{
    int l = 0, r = a[n-1] - a[0], mid;
    while (l <= r)
    {
        mid = (l + r) / 2;
        if (find(mid))
        {
            l = mid + 1;
        }
        else
        {
            r = mid - 1;
        }
    }
    return l - 1;
}
int main()
{
    iosgo();
    cin >> n >> c;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    sort(a , a + n );
    cout << solve();
}

猜你喜欢

转载自blog.csdn.net/YZcheng_plus/article/details/129326294