码迷,mamicode.com
首页 > 其他好文 > 详细

二分三分

时间:2019-06-09 12:54:15      阅读:94      评论:0      收藏:0      [点我收藏+]

标签:最小   div   clu   pac   printf   决定   print   sort   col   

这一部分还是二分好用(因为二分好写

三分在求非单调函数极值有大用

二分主要思路就是每次将当前区间分为两部分,当前接肯定在中点,左区间与右区间之中,那么把不合理的区间抛弃,就可以极快地求出解

例题:

愤怒的牛(很像跳石头)

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

二分答案,看当前答案是否合法即可

代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[100020],m,f;
inline int ok(const int &p){
    int z=0,s=0;
    for(int i=1;i<n;i++){
        if(a[i]-a[z]>=p){
            s++;
            z=i;
        }
        if(s>=m-1)
            return 1;
    }
        return 0;
}
int main()
{
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
    sort(a,a+n);
    int l=0,r=a[n-1]-a[0],k,ans=0;
    while(l<=r){
        k=(l+r)/2;
        if(ok(k)){
            l=k+1;
            ans=k;
        }
        else
            r=k-1;
    }
    printf("%d\n",ans);
    return 0;
}

 

二分三分

标签:最小   div   clu   pac   printf   决定   print   sort   col   

原文地址:https://www.cnblogs.com/648-233/p/10992939.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!