POJ 2456 Aggressive cows——二分查找(最大化最小值)

来源:互联网 发布:淘宝虚拟专营入口 编辑:程序博客网 时间:2024/06/07 21:38

题意:在一条数轴上已知n个点的坐标,在这n个点中选m个点,最大化m个点的最小距离

思路:二分查找最小距离,对于每个最小距离,求出在这个距离限制下最多能从n个点中选多少个点,然后与m比较,如果比m小则改变上界,反之改变下界

#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int INF = 1e9 + 10;int a[100010];int main(){    int n, m;    while (scanf("%d %d", &n, &m) == 2) {        for (int i = 0; i < n; i++) {            scanf("%d", &a[i]);        }        sort(a, a + n);        int L = 0, R = INF, mid;        while (L <= R) {            mid = (L + R) / 2;            int cnt = 1, dis = 0;            for (int j = 1; j < n; j++) {                dis += a[j] - a[j - 1];                if (dis >= mid) {                    cnt++;                    dis = 0;                }            }            if (cnt >= m) {                L = mid + 1;            }            else {                R = mid - 1;            }        }        printf("%d\n", R);    }    return 0;}


阅读全文
1 0
原创粉丝点击