P2115 [USACO14MAR]破坏Sabotage

题目描述

Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer John's milking equipment!

The milking equipment consists of a row of N (3 <= N <= 100,000) milking machines, where the ith machine produces M_i units of milk (1 <= M_i <= 10,000). Farmer Paul plans to disconnect a contiguous block of these machines -- from the ith machine up to the jth machine (2 <= i <= j <= N-1); note that Farmer Paul does not want to disconnect either the first or the last machine, since this will make his plot too easy to discover. Farmer Paul's goal is to minimize the average milk production of the remaining machines. Farmer Paul plans to remove at least 1 cow, even if it would be better for him to avoid sabotage entirely.

Fortunately, Farmer John has learned of Farmer Paul's evil plot, and he is wondering how bad his milk production will suffer if the plot succeeds. Please help Farmer John figure out the minimum average milk production of the remaining machines if Farmer Paul does succeed.

农夫约翰的头号敌人保罗决定破坏农民约翰的挤奶设备。挤奶设备排成一行,共N(3<= N <=100000)台挤奶机,其中第i个台挤奶机生产M_i单位(1 <= M_i<=10,000)的牛奶。

保罗计划切断一段连续的挤奶机,从第i台挤奶机到第j台挤奶机(2<= i<= j<= N-1)。注意,他不希望断开第一台或最后一台挤奶机,因为这将会使他的计划太容易被发现。保罗的目标是让其余机器的平均产奶量最小。保罗计划除去至少1台挤奶机。

请计算剩余机器的最小平均产奶量。

输入输出格式

输入格式:

第 1 行:一个整数 N。

第 2 到 N+1 行:第 i+1 行包含一个整数 M_i。

输出格式:

第 1 行: 一个实数, 表示平均牛奶产量的最小值, 保留三位小数 (四舍五入)。

输入输出样例

输入样例#1:

5
5
1
7
8
2

输出样例#1:

2.667

说明

【样例说明】

移去 7 和 8,剩下 5, 1, 2,平均值为 8/3。

【数据规模和约定】

对于 30%的数据,N <= 1,000。

对于 50%的数据,N <= 10,000。

对于 100%的数据,3 <= N <= 100,000,1 <= M_i <= 10,000。

【时空限制】

0.2s/128M

一看就是二分答案吗,怎么二分呢。

可以二分枚举平均值x,先维护一个前缀和,按题意要去掉一个区间,是平均值最小,设去掉[i,j]区间,去掉的和就是sum[j]-sum[i-1],剩下的和就是sum[n]-(sum[j]-sum[i-1]),去括号,sum[n]-sum[j]+sum[i-1](也就是[j,n]的和加上[1,i-1]的和);剩下的和除以剩下的个数就是平均值,剩下的个数n-(j-i+1)。

那么 (sum[n]-sum[j]+sum[i-1])/(n-j+i-1)<=x。

sum[n]-sum[j]+sum[i-1]<=xn-xj-x(i-1);

(sum[n]-xn)-(sum[j]-xj)+(sum[i-1]-x(i-1))<=0;

 1 #include<cstdio>
 2 #include<algorithm>
 3
 4 using namespace std;
 5 const int MAXN = 100100;
 6 int sum[MAXN];    //前缀和
 7 int n;
 8
 9 bool check(double x)
10 {
11     double minv = sum[1]-x*1;    //先假设从1开始
12     for (int i=2; i<n; ++i)
13     {
14         if (sum[n]-x*n-(sum[i]-x*i)+minv<=0) return true ;
15         minv = min(minv,sum[i]-x*i);    //因为是加,取小
16     }
17     return false ;
18 }
19 int main()
20 {
21     scanf("%d",&n);
22     for (int a,i=1; i<=n; ++i)
23     {
24         scanf("%d",&a);
25         sum[i] = sum[i-1]+a;
26     }
27     double l = 0, r = 10000;
28     while (r-l>1e-5)    //精度到0.00001,只输出三位,所以1e-5就够了
29     {
30         double mid = (l+r)/2.0;
31         if (check(mid)) r = mid;    //mid可以,就在取小
32         else l = mid;
33     }
34     printf("%.3lf",r);
35     return 0;
36 }

转载于:https://www.cnblogs.com/mjtcn/p/7094888.html

P2115 [USACO14MAR]破坏Sabotage相关推荐

  1. [USACO14MAR]破坏Sabotage

    题目链接:[USACO14MAR]破坏Sabotage 首先肯定二分最小值. 然后找到是否存在一个前缀min和后缀min之和小于0即可. AC代码: #pragma GCC optimize(&quo ...

  2. P2115 [USACO14MAR]Sabotage G(二分)

    P2115 [USACO14MAR]Sabotage G(二分) 经典分数规划二分题. 这里注意解释下原理. 假设当前二分的答案是x,实际的答案是ans. 显然若x满足条件,则 x<=ans.我 ...

  3. USACO2014MAR 破坏Sabotage

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

  4. USACO Sabotage

    洛谷 P2115 [USACO14MAR]破坏Sabotage https://www.luogu.org/problem/P2115 JDOJ 2418: USACO 2014 Mar Gold 2 ...

  5. 区块链关键技术研究进展

    摘要 区块链是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储.难以篡改.防止抵赖的记账技术,也称为分布式账本技术.近年来,区块链技术的发展对社会产生了重要的影响.本文介绍近年来 ...

  6. 社会工程常见攻击方式

    社会工程学(Social Engineering)是一种通过对受害者心理弱点.本能反应.好奇心.信任.贪 婪等心理陷阱进行诸如欺骗.伤害等危害手段.社会工程学攻击在近年来的一些网络入侵事件中起到了很大 ...

  7. 社会工程学攻击经典方法总结

    社会工程学(Social Engineering)是一种通过对受害者心理弱点.本能反应.好奇心.信任.贪婪等心理陷阱进行诸如欺骗.伤害等危害手段.社会工程学攻击在近年来的一些网络安全事件中起到了很大的 ...

  8. [USACO14MAR]Sabotage G

    [USACO14MAR]Sabotage G 题目描述 Farmer John's arch-nemesis, Farmer Paul, has decided to sabotage Farmer ...

  9. 解题:USACO14MAR Sabotage

    题面 题外话:我的实数二分有什么问题=.= 仍然(我为什么要这么说)是二分答案,如何检查呢?将所有的数减去二分出来的$mid$后求和得到和$sum$,然后如果在减出来的数列中能找出一段大于$sum$的 ...

最新文章

  1. 湘苗培优 | 从入门到精通
  2. 初中计算机实践研究计划,初中信息技术个人研修计划
  3. Docker_基础知识
  4. spring 的配置 beanpropertyname属性
  5. python抓取网站访客手机号_点击了一个教育网站,马上就有老师打电话过来,他们是怎么获取我的手机号?...
  6. 机器学习-预测之时间序列分析预测法原理及实战
  7. 如何在Angular项目里创建新的Service
  8. Java命令行界面(第21部分):航空公司2
  9. html视频位置控制器,html5中返回音视频的当前媒体控制器的属性controller
  10. C++三路比较运算符
  11. conda pip安装在哪里_Python环境篇-Minicondaamp;Pip使用汇总
  12. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))
  13. 有了代码怎么用python爬虫_python实现简单爬虫功能
  14. 快手短视频领域为例的领域数据建设探索
  15. Kafka日志清除策略
  16. Android Timer和TimerTask解决IllegalStateException:Task already scheduled or cancelled
  17. Hexo博客搭建以及主题使用
  18. 禅者的初心:乔布斯与佛教的前世今生
  19. 10 本 O'Reilly 出版的免费好书
  20. html css设计页眉页脚,如何使用CSS制作此页眉/内容/页脚布局?

热门文章

  1. 建议考事业编吗?为什么?
  2. 卢克沃顿对于湖人作用
  3. 《盘古开天地》的故事内容,《盘古开天地》的启示
  4. Elasticsearch查询速度为什么这么快?
  5. 社保交满15年就可以停缴了吗?就可以领取养老金了吗?
  6. 计算机网络之传输介质(双绞线、同轴电缆、光纤、无线电缆、微波、激光、红外线)...
  7. sql数据透视_SQL Server中的数据科学:取消数据透视
  8. sql server 跟踪_SQL Server跟踪标志指南; 从-1到840
  9. PowerShell SQL Server验证实用程序– DBAChecks
  10. [补档]noip2019集训测试赛(八)