Part1.2 基础算法-二分与三分

Part1.2 基础算法-二分与三分

A. 愤怒的牛

问题描述

需要在 n n n 个点中选取 m m m 个放置牛,问你所有放置方法中任意两头牛的最大的最小距离是多少

解题思路

很容易想到该距离的上限是 m a x i = 1 n X i − m i n i = 1 n X i max_{i=1}^{n}X_{i}-min_{i=1}^{n}X_{i} maxi=1nXimini=1nXi,其下限为 0,那么我们可以二分这个答案

假设当前枚举的答案为 x x x,当前已将插入了 i − 1 i - 1 i1 头牛,那么下一头牛的位置 X i X_{i} Xi 必定 ≥ X i − 1 + x \geq X_{i-1}+x Xi1+x,为了尽可能多的放置牛, X i X_{i} Xi 应当尽可能的小,所以下一头牛的位置 X i X_{i} Xi 应当为 ≥ X i − 1 + x \geq X_{i-1}+x Xi1+x 的最小位置

二分答案后贪心枚举答案的可行性,总时间复杂度 O ( n l o g 2 n ) O(nlog_{2}^{n}) O(nlog2n)

B. Best Cow Fences

问题描述

给定一个长度为 n n n 的非负整数序列 a a a,求一个平均数最大的,长度不小于 l l l 的子段

解题思路

显然当这个平均数很大时是不可行的,很小时一定可行,故可二分,设当前答案为 a v g avg avg,现在需要讨论该答案的可行性

假设所选区间为 [ L , R ] [L,R] [L,R],定义 s u m i = ∑ j = 1 i a j sum_{i}=\sum_{j=1}^{i}a_{j} sumi=j=1iaj

那么有 a v g [ L , R ] = s u m R − s u m L − 1 R − L + 1 avg_{[L,R]}=\frac{sum_{R}-sum_{L-1}}{R-L+1} avg[L,R]=RL+1sumRsumL1

若该区间可行,则有:

a v g [ L , R ] ≥ a v g avg_{[L,R]}\geq avg avg[L,R]avg s u m R − s u m L − 1 R − L + 1 ≥ a v g \frac{sum_{R}-sum_{L-1}}{R-L+1}\geq avg RL+1sumRsumL1avg s u m R − s u m L − 1 ≥ a v g × ( R − L + 1 ) sum_{R}-sum_{L-1} \geq avg \times (R-L+1) sumRsumL1avg×(RL+1) s u m R − a v g × R ≥ s u m L − 1 − a v g × ( L − 1 ) sum_{R}-avg \times R \geq sum_{L-1}-avg \times(L-1) sumRavg×RsumL1avg×(L1)

L L L R R R 需要满足 R − L + 1 ≥ l R-L+1 \geq l RL+1l

定义 b i = s u m i − a v g × i b_{i}=sum_{i} - avg \times i bi=sumiavg×i

那么若 m a x i = R n b i ≥ m i n i = 1 R − l + 1 b i max_{i=R}^{n}b_{i} \geq min_{i=1}^{R-l+1}b_{i} maxi=Rnbimini=1Rl+1bi 则称 a v g avg avg 为合法答案

总时间复杂度 O ( n l o g 2 n ) O(nlog_{2}^{n}) O(nlog2n)

C. 曲线

问题描述

定义 S i ( x ) = a x 2 + b x + c S_{i}(x) = ax^{2}+bx+c Si(x)=ax2+bx+c F ( x ) = m a x i = 1 n S i ( x ) F(x)=max_{i=1}^{n}S_{i}(x) F(x)=maxi=1nSi(x)

问你 F ( x ) F(x) F(x) 在区间 [ 0 , 1000 ] [0,1000] [0,1000] 上的最小值是多少

保证 a ≥ 0 a \geq 0 a0

解题思路

显然 F ( x ) F(x) F(x) S i ( x ) S_{i}(x) Si(x) 都是先减再增的,直接三分 x x x,然后求解 S i ( x ) S_{i}(x) Si(x) 的最大值即可

F. 灯泡

问题描述

在这里插入图片描述
求解 L L L 的最大值

解题思路

在这里插入图片描述
则有:
H − h h ′ = x D ⇒ h ′ = D ( H − h ) x \frac{H-h}{h'}=\frac{x}{D} \Rightarrow h'=\frac{D(H-h)}{x} hHh=Dxh=xD(Hh)
L = H − h ′ + x = H − D ( H − h ) x + x L=H-h'+x=H-\frac{D(H-h)}{x}+x L=Hh+x=HxD(Hh)+x

其中 D ( H − h ) H ≤ x ≤ D \frac{D(H-h)}{H} \leq x \leq D HD(Hh)xD

显然这是一个双曲函数,三分 x x x 求解其极值即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值