zoukankan      html  css  js  c++  java
  • 二分三分

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

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

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

    例题:

    愤怒的牛(很像跳石头)

    农夫 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
    ",ans);
        return 0;
    }
  • 相关阅读:
    visual studio 2012 知识笔记
    R语言初体验
    java_Thread
    LoadRunner JAVA Vuser协议手工写脚本Failed to find Classes.zip entry in Classpath问题
    如何判断某个数据表是否存在
    ftp://hxtech.com
    成本算法
    移动平均算法
    命令行解压缩文件
    互斥(mutex)
  • 原文地址:https://www.cnblogs.com/648-233/p/10992939.html
Copyright © 2011-2022 走看看