我对二分的理解:https://www.cnblogs.com/AKMer/p/9737477.html

题目传送门:https://www.luogu.org/problemnew/show/P2115

对于我们要求的一个“最小平均值”,我们可以通过二分来得到。对于我们二分的那个平均值,我们令每一个数全部减去它,然后这时删掉“最大子段和”就是最优策略。

假设减完平均值之后的数列和为\(sum\),那么我们二分的平均值为\(ave\),要使得平均值降到\(ave\)以下,整个数列的权值和至少要减少\(sum\)。也就是说,减得越多越好,只要能减到\(sum\)那么多,那么最低平均值必然小于等于\(ave\)。因为减完之后\(sum<=0\),也就是平均值乘以\(n\)小于等于\(ave*n\),也就是平均值会小于等于\(ave\)。

总结:如果最大子段和要大于等于删完平均值之后的数列和,那么说明我可以通过删掉这一段使得平均值降低到我们二分的值或那个值以下。

时间复杂度:\(O(nloga)\)

空间复杂度:\(O(n)\)

代码如下:

#include <cstdio>
#include <algorithm>
using namespace std; const double eps=1e-6;
const int maxn=1e5+5; int n;
int a[maxn];
double b[maxn],sum[maxn]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} bool check(double ave) {
for(int i=1;i<=n;i++)
b[i]=a[i]-ave,sum[i]=sum[i-1]+b[i];//求前缀和
double mn=sum[1],fake=-1e9;//mn存1~i-1的前缀和最小值,fake存最大子段和
for(int i=2;i<n;i++) {
fake=max(fake,sum[i]-mn);//sum[i]-1~i-1的前缀和最小值就是以i结尾的最大子段和
mn=min(mn,sum[i]);//更新mn
}
if(fake>=sum[n])return 1;//判断平均值是否可以小于等于ave
return 0;
} int main() {
n=read();double l=0,r=0;
for(int i=1;i<=n;i++)
a[i]=read(),r=max(r,(double)a[i]);
while(l+eps<r) {
double mid=(l+r)/2;
if(check(mid))r=mid;
else l=mid;//实数二分
}
printf("%.3lf\n",r);//平均值肯定不能比r小了。
return 0;
}

洛谷【P2115】[USACO14MAR]破坏Sabotage的更多相关文章

  1. 洛谷P2115 [USACO14MAR]破坏Sabotage

    题目描述 Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's milking equipmen ...

  2. 洛谷2115 [USACO14MAR]破坏Sabotage

    https://www.luogu.org/problem/show?pid=2115 题目描述 Farmer John's arch-nemesis, Farmer Paul, has decide ...

  3. P2115 [USACO14MAR]破坏Sabotage

    题意:给你一个正整数序列,让你删去一段区间内的数[l,r] $1<l\le r <n$ 使得剩余的数平均值最小$n\le 10^5$ 1.不难想到暴力,用前缀和优化$O(n^2)$ #in ...

  4. 洛谷P2115 Sabotage G 题解

    题目 [USACO14MAR]Sabotage G 题解 本蒟蒻又来了,这道题可以用二分答案来解决.我们可以设答案最小平均产奶量为 \(x \ (x \in[1,10000])\) .然后二分搜索 \ ...

  5. [USACO14MAR]破坏Sabotage 二分答案

    题目描述 Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's milking equipmen ...

  6. LuoguP2115 [USACO14MAR]破坏Sabotage【二分答案】By cellur925

    本来是想找一道生成树的题做的...结果被洛咕的标签骗到了这题...结果是二分答案与生成树一点mao关系都没有.... 题目大意:给你一个序列,请你删去某一个$l~r$区间的值($2<=i< ...

  7. 洛谷——P2212 [USACO14MAR]浇地Watering the Fields

    P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...

  8. 洛谷 P2212 [USACO14MAR]浇地Watering the Fields 题解

    P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...

  9. [USACO14MAR]破坏Sabotage

    还是二分答案,发现我的$check$函数不太一样,来水一发题解 列一下式子 $$\frac{sum-sum[l,r]}{n-(r-l+1)}<=ans$$ 乘过去 $$sum-sum[l,r]& ...

随机推荐

  1. Springboot整合日志时候出现的问题

    上图是问题,按照路径去找下,发现其实是jar包重复导致的! 在对应的项目上,右键--->属性(Properties)--->JavaBuild Path  然后选择Libraries 页签 ...

  2. But what exactly do we mean by "gets closer to"?

    https://rdipietro.github.io/friendly-intro-to-cross-entropy-loss/ [将输入转化为输出:概率分布] When we develop a ...

  3. WiX 中XML引用变量说明

    WiX 安装工程中的XML 文件所引用变量说明: The WiX project supports the following project reference variables: Variabl ...

  4. python数据分析之:时间序列二

    将Timestamp转换为Period 通过使用to_period方法,可以将由时间戳索引的Series和DataFrame对象转换为以时期索引 rng=pd.date_range('1/1/2000 ...

  5. python 安装anaconda, numpy, pandas, matplotlib 等

    如果没安装anaconda,则这样安装这些库: pip install numpy pip install pandas pip install matplotlib sudo apt-get ins ...

  6. spark 在yarn执行job时一直抱0.0.0.0:8030错误

    近日新写完的spark任务放到yarn上面执行时,在yarn的slave节点中一直看到报错日志:连接不到0.0.0.0:8030 . The logs are as below: 2014-08-11 ...

  7. linux sort按照指定列排序

    sort怎样按指定的列排序0000 27189 41925425065f 15 419254250663 7 419254250675 5 419254250691 76 419254250693 2 ...

  8. deviceToken的获取(一)

    1.获得deviceToken的过程     1>客户端向苹果服务APNS,发送设备的UDID和英语的Bundle Identifier.2>经苹果服务器加密生成一个deviceToken ...

  9. Python map,reduce,filter,apply

    map(function, iterable, ...) map()函数接收两个参数,一个是函数,一个是可迭代的对象,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 基本等 ...

  10. ajax的原理及使用

    ajax并非是一门新的技术,而是现有技术的一种新的组合用法,即是结合异步javascript和XML,它是一种创建快速动态网页的技术.其中,异步javascript是相对于同步而言的,同步模式通常称为 ...