AcWing 102. 最佳牛围栏 (前缀和+浮点数二分)


思路首先数组某个连续区间想到用前缀和;

要找到最大的区间就可以使用二分法找到想要的最大值

范围就是left=1 right= 2000

最大值只能在这个区间上

然后在确定check函数如何写

前缀和每次都减去一个avg这样只需要判断前缀和sum是否大于等于0

如图所示得到前缀和sum以后我们确定第一个区间就是【1,m】,所以j=m开始然后我们 我们要使以i结尾的区间和尽可能小这样就可以保证当间隔大于等于f时sum【j】-sum【i】的值最大 ,所以用minv计入最小值只要有一个j成立那么就可以直接返回true 如果循环还没找到就不满足返回false

#include<iostream>
#include<algorithm>
using namespace std;
const int n=1e5+10; 
double a[n];
double sum[n];
 int m;
 int f;
bool check (double avg)
{
    for(int i=1;i<=m;i++)
    sum[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值