POJ 2456

利用二分思想:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long ll;
const int MAXN=1000000;
int a[MAXN];
int N,M;
bool calc(int mid){
    int last=0;
    for(int i=1;i<M;i++){
        int crt=last+1;

        while(crt<N&&a[crt]-a[last]<mid)
            crt++;
        if(crt==N) return false;
        last=crt;
    }
    return true;
}

void solve(){
    sort(a,a+N);

    int right=a[N-1],left=0;

    while(right-left>1){
        int mid=(right+left)/2;
        if(calc(mid))
            left=mid;
        else right=mid;
    }

    printf("%d\n",left);
}

int main(){
    while(cin>>N>>M){
        for(int i=0;i<N;i++)
            cin>>a[i];
        solve();
    }
}
时间: 2024-08-27 15:37:37

POJ 2456的相关文章

二分搜索 POJ 2456 Aggressive cows

题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cmath> 7 using namespace std; 8 9 const int MAXN = 1e5 + 10; 10 const int INF = 0x3f3f3f3f; 11 int x[MAXN]; 12 int n, m; 13 14 bool check(int d)

poj 2456 Aggressive cows,二分,最大化最小值

描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000,000,000). 但是,John的C (2 <= C <= N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗.为了不让牛互相伤害.John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢? 输入 有多组测试数据,以EOF结束. 第

poj 2456 二分法 最大化最小值

题目:http://poj.org/problem?id=2456 重新练习下二分法,发现还是手速不够 从这道题学到一下几点: 1.线性分几段的方法,看我的Judge()代码: 2.二分的while()最终打印的是down,而不是mid(我代码里写的是ans),或者up, 这么想:跳出循环的时候,假设while里的判断,Judge(ans)==1,那么down是正确解,up不是 Judge(ans)==0,那么ans跟up都不是正确解 综上,打印down才能输出正确解 3.调了好一会二才发现的b

POJ 2456 Aggressive cows---二分搜索法

///3.最大化最小值 /** POJ 2456 Aggressive cows Q:一排牛舍有N (2 <= N <= 100,000) 个,位置为x1,...,xN (0 <= xi <= 1,000,000,000) 为使牛之间不受到伤害,需最大化他们之间的距离,求最大化最近两头牛之间的距离 共M只牛 A: 条件C(x):可以使得最近两头牛之间的距离不小于d->求满足条件的最大d->如何高效的判断C(x) */ #include"iostream&quo

poj 2456 最小值最大化

http://poj.org/problem?id=2456 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0 <= xi <= 1,000,000,000). His C (2 <= C <= N) cows

[ACM] poj 2456 Aggressive cows (二分查找)

Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5436   Accepted: 2720 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...

poj 2456 Aggressive cows(二分)

// n点中选c点放下c头牛 是的n-1段距离中的最短距离最大 ,求这个最大的最短距离 //假设当前的最小值为x,如果判断出最小差值为x时可以放下C头牛, //就先让x变大再判断:如果放不下,说明当前的x太大了, //就先让x变小然后再进行判断.直到求出一个最大的x就是最终的答案. # include <algorithm> # include <string.h> # include <stdio.h> using namespace std; int n,c,i,a

poj 2456 Aggressive cows

题目链接:http://poj.org/problem?id=2456 题目大意:给你n个坐标,求c个坐标中最小的最大距离. 思路:这题跟poj3273有点是差不多的方法,不过要先把坐标排序,然后用在最短距离跟最大距离之间进行查找,每次二分判断最小距离为mid的个数 code: #include<cstdio> #include<iostream> #include<cmath> #include<algorithm> #include<cstring

POJ 2456 Aggressive cows (二分 基础)

Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7924   Accepted: 3959 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,...

POJ 2456 Aggressive cows(二分)

题目链接:http://poj.org/problem?id=2456 题意:有一排n个牛舍,坐标分别为xi,有m头牛,希望尽可能把他们之间分开,求他们之间最近的两头牛之间的距离最大可以拉到多少.这是二分中最大化最小值的题目,英文的题目又最大又最小有的人不易理解. 思路:显然两头最近的牛的距离太大将没有一种方式安置在牛舍中,两头最近的牛距离越小就越能放置在牛舍中,所以用把答案二分出来,每个mid要模拟放置暴力下可不可以放得下. //532K 188MS #include<cstdio> #in