AcWing102. 最佳牛围栏

题目

农夫约翰的农场由 N N N 块田地组成,每块地里都有一定数量的牛,其数量不会少于 1 头,也不会超过 2000 头。

约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。

围起区域内至少需要包含 F F F 块地,其中 F F F 会在输入中给出。

在给定条件下,计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。

输入格式

第一行输入整数 N N N F F F,数据间用空格隔开。

接下来 N N N 行,每行输入一个整数,第 i + 1 i+1 i+1 行输入的整数代表第 i i i 片区域内包含的牛的数目。

输出格式

输出一个整数,表示平均值的最大值乘以 1000 再 向下取整 之后得到的结果。

数据范围

  • 1 ≤ N ≤ 100000 1≤N≤100000 1N100000
  • 1 ≤ F ≤ N 1≤F≤N 1FN

输入样例

10 6
6 
4
2
10
3
8
5
9
4
1

输出样例

6500

分析

题意简而言之就是:给定正整数序列 A A A,求一个平均数最大的、长度不小于 L L L 的(连续的)子段。

二分答案,判定 “是否存在一个长度不小于 L L L 的子段,平均数不小于二分的值”。

如果把数列中每个数都减去二分的值,就转化为判定 “是否存在一个长度不小于 L L L 的子段,子段和非负”。

下面着重来解决以下两个问题。

1、求一个子段,它的和最大,没有 “长度不小于 L L L” 这个限制。

无长度限制的最大子段和问题是一个经典问题,只需 O ( N ) O(N) O(N) 扫描该数列,不断把新的数加入子段,当子段和变成负数时,把当前的整个子段清空。扫描过程中出现过的最大子段和即为所求。POJ-1050.To The Max

2、求一个子段,它的和最大,子段的长度不小于 L L L

子段和可以转化为前缀和相减的形式,即设 s u m i sum_i sumi 表示 A 1 A_1 A1 ~ A i A_i Ai 的和,则有:
max ⁡ i − j ≥ L { A j + 1 + A j + 2 + . . . + A i } = max ⁡ L ≤ i ≤ n { s u m i − min ⁡ 0 ≤ j ≤ i − L { s u m j } } \max_{\mathclap{i - j \ge L}} \{ A_{j + 1} + A_{j + 2} + ... + A_i\} = \max_{L \le i \le n}\{ sum_i - \min_{0 \le j \le i - L}\{sum_j\}\} ijLmax{Aj+1+Aj+2+...+Ai}=Linmax{sumi0jiLmin{sumj}}

仔细观察上式可以发现,随着 i i i 的增长, j j j 的取值范围 0 ~ i i i - L L L 每次只会增大 1。换言之,每次只会有一个新的取值进入 min ⁡ { s u m j } \min\{sum_j\} min{sumj} 的候选集合,所以没有必要每次循环枚举 j j j,只需要用一个变量记录当前最小值,每次与新的取值 s u m i − L sum_{i-L} sumiL min ⁡ \min min 就可以了。

double ans = -1e10;
double min_val = 1e10;
for (int i = L; i <= N; i++) {min_val = min(min_val, sum[i - L]);ans = max(ans, sum[i] - min_val);
}

解决了问题2之后,只需要看一下最大子段和是不是非负数,就可以确定二分上下界的变化范围了。

本题来源于POJ-2018.Best Cow Fences

代码

#include <iostream>
using namespace std;const int N = 100005;
double a[N], b[N], sum[N];int n, L;bool check(double mid) {for (int i = 1; i <= n; i++) b[i] = a[i] - mid; //每个数减去二分的值for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + b[i]; //前缀和double ans = -1e10; double min_val = 1e10;//子段长度不小于L的最大子段和for (int i = L; i <= n; i++) {min_val = min(min_val, sum[i - L]);ans = max(ans, sum[i] - min_val);}//是否存在一个长度不小于L的子段,子段和非负return ans >= 0;
}int main() {cin >> n >> L;for (int i = 1; i <= n; i++) scanf("%lf", &a[i]);double eps = 1e-5;double l = -1e6;double r = 1e6;while (r - l > eps) {double mid = (l + r) / 2;if (check(mid)) l = mid;else r = mid;}cout << int (r * 1000) << endl; return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过AppLink把拼多多热门榜单商品同步至小红书

上篇说到AppLink当中定时调度方式如何配置&#xff0c;这次来演示一下&#xff0c;如何把热门榜单信息同步至小红书 1.拉取一个定时器作为触发动作&#xff0c;通过配置定时器调度时间将定时策略配置为每天执行一次 2.触发动作完成后通过好单库获取拼多多每日热门榜单&#xf…

UE5、CesiumForUnreal实现加载GeoJson绘制盒体(Box)功能(StaticMesh方式)

文章目录 1.实现目标2.实现过程2.1 实现原理2.2 具体代码2.3 应用测试2.3.1 材质2.3.2 蓝图测试3.参考资料1.实现目标 与之前基于StaticMesh创建Polygon和Wall类似,本文通过读取本地GeoJson数据,在UE中以staticMeshComponent的形式绘制出盒体Box,支持Editor和Runtime模式,在…

UE4基础篇十五:AI行为树

一、学习完教程后需要掌握知识点 1.1、基础概念: 1.1 行为树:控制并显示AI的决策制定过程 1.2 黑板:可以看做是行为树的创建一些公有变量,外部可以修改行为树黑板的变量值,达到修改行为树状态的逻辑 1.3 环境查询: 获取地图环境中的信息进行一个筛选,查找到所需要的的…

性能小课堂:Jmeter录制手机app脚本!

环境准备&#xff1a;1.手机2.wifi3.Jmeter 具体步骤&#xff1a; 1、启动Jmeter&#xff1b; 2、“测试计划”中添加“线程组”&#xff1b; 3、“工作台”中添加“HTTP代理服务器”&#xff1b; 4、配置代理服务器&#xff1a;Global Settings下面的端口配置&#xff1a…

集成仿真软件 PLEXOS 9.0 授权永久完美

PLEXOS是由能源示例发布的能源市场集成仿真软件。能源市场是一个充满活力和活力的市场&#xff0c;在这个大市场中有各种各样的数据和信息模型。观看每日市场发展和大量数据可能会使您感到困惑&#xff0c;并难以进行未来的投资和分析。使用集成和全面的方法是应对这一挑战的唯…

随笔-事儿就这么个事儿

好久没写了&#xff0c;小A要催更&#xff0c;还答应让我写一下他的经历&#xff0c;这还有啥说的&#xff0c;开整。 1、升级 前段时间登录公司的办公系统处理一个事务申请&#xff0c;发现有个粗体标红的通知&#xff0c;是关于今年的晋升名单公示。进去看了一眼&#xff0…

养猫7年:猫罐头牌子哪个好用?5款口碑好的猫罐头推荐!

猫罐头牌子哪个好用&#xff1f;刚开始养猫真的好心累&#xff0c;因为一开始啥也不懂&#xff0c;关于猫猫的饮食这也不会选那也不会选&#xff0c;就很容易踩雷&#xff0c;为此花了不少钱&#xff0c;相信很多新手铲屎官现在也处于这种状态吧。 作为一个养猫7年的资深铲屎官…

容器 - 八大架构的演进

Docker 容器虚拟化核心技术docker生态、架构及组成部分容器编排详解核心原理实现 我目前就来学学基本知识。 八大架构的演进 文章目录 Docker八大架构的演进1. 单机架构2. 应用数据分离架构3. 应用服务集群架构4. 读写分离/主从分离架构5. 冷热分离架构6. 垂直分库架构/分布…

OpenAI 的 API 简介

OpenAI Completions API 是 OpenAI 提供的一项服务&#xff0c;允许开发者利用 OpenAI 的语言模型&#xff08;例如 GPT-3 或 GPT-4&#xff09;生成文本。当开发者向该 API 提供一个文本提示&#xff08;prompt&#xff09;时&#xff0c;语言模型会尝试生成一个自然且连贯的文…

流程变量的设置和获取

流程变量在整个工作流中扮演很重要的作用。例如&#xff1a;请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。这篇博文就简单的为大家介绍下流程变量的设置和获取。 …

【路径最全用法】python代码讲解os.path包的最全用法

目录 概览 &#x1f697;&#x1f697;os.getcwd() &#x1f697;&#x1f697;os.chdir() &#x1f697;&#x1f697;os.path.abspath(path) &#x1f697;&#x1f697;os.path.basename(path) &#x1f697;​​​​​​​&#x1f697;os.path.dirname(path) &#…

细节决定成败——我的日志去哪了?

概述 编写本文档的目的有两点。 本周遇到了一个日志丢失的问题&#xff0c;经过分析&#xff0c;觉得挺有意思的。向大家分享一下我的分析及解决思路。应该在很多项目中都会有该问题。领导和我私下讨论过多次&#xff0c;当前的autodomain代码对文件读取的频率太高了,如何去避…

Spring框架学习 -- 核心思想

目录 (1) Spring是什么? (2) 什么是IOC容器? (3) 从传统开发认识spring (4) 这种传统开发的缺陷 (5)解决传统开发中的缺陷 (6) 对比总结规律 (7) 理解IOC 创作不易多多支持 (1) Spring是什么? 我们常说的Spring的全称是: Spring Framework(Spring框架), 它是一个开源…

使用 Core Tools 在本地开发 Azure Functions

学习模块 使用 Core Tools 在本地创建和运行 Azure Functions - Training | Microsoft Learn 文档 使用 Core Tools 在本地开发 Azure Functions | Microsoft Learn GitHub - Azure/azure-functions-core-tools: Command line tools for Azure Functions 其它 安装适用于 A…

纯css实现边界检测小球动画

文章目录 前言实现环境话不多说直接上代码后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;css实现炫酷的动画 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错…

北醒携全球首款256线车规量产激光雷达亮相广州国际车展

11月17日&#xff0c;北醒携全球首款256线车规量产激光雷达亮相广州国际车展。在车展期间&#xff0c;北醒还公布了与广州花都区人民政府达成投资合作&#xff0c;获滴滴自动驾驶投资以及与捷普联合打造的全球首条量产256线级别车规激光雷达的生产线即将贯通的等多条利好信息&a…

2023-11-20 LeetCode每日一题(最大子数组和)

2023-11-20每日一题 一、题目编号 53. 最大子数组和二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的…

使用dlopenC++动态库的函数符号的常规做法

文章目录 一、Name Mangling二、extern "C"三、Loading Functions四、Loading Classes参考 一、Name Mangling 在 C 中&#xff0c;符号名称与函数名称相同&#xff1a;strcpy 的符号将是 strcpy&#xff0c;因为在 C 中没有两个非静态函数可以具有相同的名称。 因…

C语言童年生活二三事(ZZULIOJ1091:童年生活二三事(多实例测试))

题目描述 Redraiment小时候走路喜欢蹦蹦跳跳&#xff0c;他最喜欢在楼梯上跳来跳去。 但年幼的他一次只能走上一阶或者一下子蹦上两阶。 现在一共有N阶台阶&#xff0c;请你计算一下Redraiment从第0阶到第N阶共有几种走法。 输入&#xff1a;输入包括多组数据。 每组数据包括一…

antd design 5 版本 文件上传

<UploadcustomRequest{customRequest}accept".csv" showUploadList{false}><Button icon{<UploadOutlined />}>上传 CSV 文件</Button></Upload> accept 代表限制的上传类型 也可设置 .excel // 文件上传 ( CSV ) const customReques…