二分三分
Posted 648-233
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分三分相关的知识,希望对你有一定的参考价值。
这一部分还是二分好用(因为二分好写)
三分在求非单调函数极值有大用
二分主要思路就是每次将当前区间分为两部分,当前接肯定在中点,左区间与右区间之中,那么把不合理的区间抛弃,就可以极快地求出解
例题:
愤怒的牛(很像跳石头)
农夫 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;
以上是关于二分三分的主要内容,如果未能解决你的问题,请参考以下文章