描述

Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains a certain number of cows, 1 <= ncows <= 2000.

FJ wants to build a fence around a contiguous group of these fields in order to maximize the average number of cows per field within that block. The block must contain at least F (1 <= F <= N) fields, where F given as input.

Calculate the fence placement that maximizes the average, given the constraint.

输入

  • Line 1: Two space-separated integers, N and F.
  • Lines 2..N+1: Each line contains a single integer, the number of cows in a field. Line 2 gives the number of cows in field 1,line 3 gives the number in field 2, and so on.

输出

  • Line 1: A single integer that is 1000 times the maximal average.Do not perform rounding, just print the integer that is 1000*ncows/nfields.

样例输入
10 6
6
4
2
10
3
8
5
9
4
1
样例输出
6500

思路:

 1.对于二分,二分是二分性而不是单调性 只要满足可以找到一个值一半满足一半不满足即可 而不用满足单调性2.因此,对于本题,我们二分枚举区间个数不小于f的区间和的平均数。以下注意点:a.对于一段区间,每个数减去区间的平均数,如果大于0 那么他本身就大于平均数,如果小于0 那么它本身就小于平均数。我们直接用前缀和来统计每个区间,来达到快速判断一个区间里的平均值是否大于或小于我们二分枚举的平均数。b.若我们枚举长度至少为f的区间最优时,即[l,r],那么就是保证a[l−1]要尽量地小,然后a[r]要尽量地大,所以说我们就需要枚举这个l,但是这样的话时间复杂度就上去了。我们发现,每一次r变大后,l的取值范围从[1,l]变成了[1,l+1],因此我们定义一个minc去每次存储l变化后[1,l]的最优极小值c.最后结果向下取整,因此我们取的是r,而不是l。若是取l,可能会因为精度差,达不到结果。

参考代码

#include <bits/stdc++.h>
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define LL long long#define x first#define y second#define PII pair<int,int>#define PIS pair<int,string>#define PIII pair<int,PII>#define PDD pair<double,double>using namespace std;const int INF=0x3f3f3f3f;const int N=1e5+5;const int M=1e7;const int mod=1e9+7;int n,m,f;int c[N];double sum[N];/**/bool ok(double avg){//将每个地牛的个数减去平均值,通过前缀和来判断一个区间是否大于这个平均数//当前缀和小于0时,即区间平均数小于这个平均值//当前缀和大于0时,即区间平均数大于这个平均值for(int i=1;i<=n;i++)sum[i]=sum[i-1]+c[i]-avg;//设置最小值double minc=0;for(int i=0,j=f;j<=n;j++,i++){//存储1~l的最优极小值minc=min(minc,sum[i]);//满足条件,返回if(sum[j]>=minc)return true;}//都不满足该平均数return false;}int main(){io;cin>>n>>f;for(int i=1;i<=n;i++){cin>>c[i];}double l=0,r=2000;//二分区间的最大平均数 midwhile(r-l>1e-5){double mid=(l+r)/2;if(ok(mid))l=mid;else r=mid;}cout<<int(r*1000);// system("pause");return 0;}

Best Cow Fences (前缀和 + 二分)相关推荐

  1. POJ2018-Best Cow Fences【实数二分答案】

    正题 题目链接:http://poj.org/problem?id=2018 大意 有n个数,一段长度不小于L的子段,使他们的平均值最大. 解题思路 二分答案,然后一遍暴力用最大子段和的方法求出是否可 ...

  2. 【实数二分/前缀和维护】Best Cow Fences

    Poj 2018 Best Cow Fences 实数二分+前缀和维护 调了一晚上, 但发现没什么注意事项orz 无输出只因eps定义成了int型QAQ哭唧唧 #include<cstdio&g ...

  3. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)

    $ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...

  4. 【二分】Best Cow Fences(poj 2018)

    Best Cow Fences poj 2018 题目大意: 给出一个正整数数列,要你求平均数最大,长度不小于M的字串,结果乘1000取整 输入样例 10 6 6 4 2 10 3 8 5 9 4 1 ...

  5. 1434 Best Cow Fences

    1434 Best Cow Fences 来自一本通的二分,练习二分啊啊啊 求一个子序列,并且使得平均数最大,很明显是一个二分查找,也不知道要维护什么信息 一般对于这样的子序列的问题,肯定会设计到前缀 ...

  6. POJ2018 Best Cow Fences —— 斜率优化DP

    题目链接:https://vjudge.net/problem/POJ-2018 Best Cow Fences Time Limit: 1000MS   Memory Limit: 30000K T ...

  7. poj3061尺取法/前缀和 二分(java)

    今天遇到这题因为以前没见到过,当时就是想着应该有着一个很简单的方法可以过但是奈何就是没思路.后来看了别人思路写了下来.学习了尺取法 poj3061 题目介绍: Description A sequen ...

  8. [Leedcode][JAVA][第209题][长度最小的子数组][滑动窗口][前缀和][二分查找][双指针]

    [问题描述][中等] 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度.如果不存在符合条件的连续子数组,返回 0.示例: 输入: ...

  9. LeetCode 528. 按权重随机选择(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个正整数数组 w ,其中 w[i] 代表下标 i 的权重(下标从 0 开始),请写一个函数 pickIndex ,它可以随机地获取下标 i,选取下标 ...

  10. LeetCode 497. 非重叠矩形中的随机点(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个非重叠轴对齐矩形的列表 rects,写一个函数 pick 随机均匀地选取矩形覆盖的空间中的整数点. 提示: 整数点是具有整数坐标的点. 矩形周边上 ...

最新文章

  1. SpringMVC源码分析(4)剖析DispatcherServlet重要组件
  2. linux fastQC 操作命令,linux-ubuntu下fastQC的安裝及使用
  3. React开发(183):ant design 中treeSelect控制选中
  4. Python中的字符串(搜索和替换、对齐、统计、分离和连接)
  5. Iplat62---CRUD
  6. linux下定时执行任务方法【转】
  7. Unity3D之NGUI基础6:UIButton按钮
  8. 红帽学习笔记[RHCSA] 第五课[用户、权限相关]
  9. 皮尔森相关系数_克莱姆相关系数的计算
  10. 超级无敌屌炸天位运算快读
  11. iWebShop 电商项目实战003----页面初始化数据测试
  12. iOS 保证视频的清晰度和流畅度
  13. 如何激励公司员工最有效?
  14. linux学习笔记(五)编译内核模块生成ko驱动文件
  15. Ios html 离线浏览,离线iOS应用的HTML 5制作指南(2)
  16. 北大软微19计算机考研招生,19年北大软微初试高分学长学姐经验贴
  17. 知名软件ADSafe暗藏恶意代码 从众多网站劫持流量
  18. html怎么选择文件夹路径,js 选择本地文件夹路径
  19. F28033之ePWM
  20. 三齿轮问题:三个齿轮啮合

热门文章

  1. 在ti官网上找相关芯片的例程
  2. 微型计算机 移动硬盘,超跑俱乐部 USB 3.0移动硬盘横向评测
  3. Android ART介绍
  4. 你知道怎么提取音乐伴奏消除人声吗?小白也能轻松操作
  5. html顺序进场动画,十六种炫酷纯css加载动画(一)
  6. ApacheDS 安装以及LDAPS配置(图文)
  7. android 字节转wav,Android音频开发(4):PCM转WAV格式音频
  8. 51单片机+ESP8266实现局域网内WiFi控制LED
  9. 外贸Soho创业之前期要做哪些准备,要不要全职开始创业
  10. 底层学习笔记(打开黑箱世界)