您的位置:首页 > 其它

二分贪心 E 找距离最大的最小值

2017-04-24 09:36 176 查看
1、简单描述

有n个不连续的格子,每一个格子对应一个位置坐标,将c头牛分别放入不同的格子中,尽可能地使牛的距离相隔远,求在不同放法中最小距离的最大值。

2、思路

# include <iostream>

# include <algorithm>

using namespace std;

int N, C, node[100001];

bool Search(int x)

{

    int last = node[1], m = 1;

    for(int i = 2; i <= N; i++)

    {

        if(node[i] - last >= x)

        {

            last = node[i];

            m++;

        }

        if(m >= C)

        return true;

    }

        return false;

}

int main()

{

    cin >> N >> C;

    for(int i = 1; i <= N; i++)

    {

        cin >> node[i];

    }

    sort(node + 1, node + N + 1);

    int l = node[1], r = node
;

    while(l + 1 < r)

    {

        int mid = (l + r) / 2;

        if(Search(mid))

            l = mid;

        else

            r = mid;

    }

    cout << l << endl;

    return 0;

}

二分查找

一开始的时候细节没注意到,如果为3和4,while(l<r)会进入死循环。

提交时显示超时,将cin改为scanf,提高速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: