每日一题——Best Cow Fences

news/2025/3/12 21:25:10/文章来源:https://www.cnblogs.com/PZnwbh/p/18768598

题目

Best Cow Fences

引言

对于二分,我们先引入模板。二分模板一共有两个,分别适用于不同情况,mid在哪一边,版本1属于左半边,版本2属于右半边。
算法思路:假设目标值在闭区间[l, r]中, 每次将区间长度缩小一半,当l = r时,我们就找到了目标值。

版本1
当我们将区间[l, r]划分成[l, mid]和[mid + 1, r]时,其更新操作是r = mid或者l = mid + 1;,计算mid时不需要加1。

int bsearch_1(int l, int r)
{while (l < r){int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}return l;
}

版本2
当我们将区间[l, r]划分成[l, mid - 1]和[mid, r]时,其更新操作是r = mid - 1或者l = mid;,此时为了防止死循环,计算mid时需要加1。

int bsearch_2(int l, int r)
{while (l < r){int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}return l;
}

对于实数二分,精度由eps决定,若需要保持k位,eps位1e(-k-2),比如保留四位eps=1e-6。

int bsearch_3(int l, int r)
{double eps = 1e-6;while (r - l > eps){double mid = l + r >> 1;if (check(mid)) l = mid;else r = mid;}return l;
}

题解

回归正题,二分的使用不一定在于单调性,而在于他是否能将一个区间分成两半,一半满足,一半不满足。那么我们判断是否存在一个平均值大于等于mid,如果最优解是x,那么mid <= x的时候,必然可以找到一段,其平均值≥mid,否则一定找不到。我们可以将每个数减去平均数mid,若大于0说明它本身大于平均数,若小于0说明他本身小于平均数,然后对于一个区间和来说大于0,就是说明它的平均数比mid大。而区间和可以用前缀和的思想来实现,即sum[i]-sum[j]>0就是存在一个区间[j+1,i]满足平均数大于mid,而这里的j是可以从1枚举到i-m+1的,取他们中间最小的就行了。

参考代码

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
int n, m;
int cow[N];
double sum[N];
bool check(double avg){for(int i = 1; i <= n; i ++) sum[i] = sum[i - 1] + cow[i] - avg;double minv = 0;for(int i = m, j = 0; i <= n; i ++, j ++){minv = min(minv, sum[j]);if(sum[i] >= minv) return true;}return false;
}
int main(){cin >> n >> m;for(int i = 1; i <= n; i ++) cin >> cow[i];double l = 0, r = 2000;while(r - l > 1e-5){double mid = (l + r) / 2;if(check(mid)) l = mid;else r = mid;}cout << (int)(r * 1000) << endl;return 0;
}

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

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

相关文章

20241110 实验一《Python程序设计》实验报告

20241110 2024-2025-2 《Python程序设计》实验x报告 课程:《Python程序设计》 班级: 2411 姓名: 王方俊 学号:20241110 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

20242125实验一《Python程序设计》实验报告

20242125 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2421 姓名: 单嘉怡 学号:20242125 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

20242120庞耀 2024-2025-2 《Python程序设计》实验一报告

20242120 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2421 姓名:庞耀 学号:20242120 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 (1).熟悉Python开发环境; (2).练习Python运行、调试技能;(编写书中的…

20242122 实验一_《Python公选课》实验一

课程:《Python程序设计》 班级: 2421 姓名: 苏锦泷 学号:20242122 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习变量和类型、字符串、对象、缩进和注释等; 4. 掌握…

20242127 实验一《Python程序设计》实验报告

20242127 2024-2025-2 《Python程序设计》实验报告 课程:《Python程序设计》 班级: 2421 姓名: 李映亮 学号:20242127 实验教师:王志强 实验日期:2021年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,…

20242217 实验一《Python程序设计》实验报告

20242217 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2422 姓名: 王一超 学号:20242217 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

20242111 实验一《Python程序设计》实验报告

20242111 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2421 姓名: 胡丁玮 学号:20242111 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 (1).熟悉Python开发环境; (2).练习Python运行、调试功能; (3).…

20242938 2024-2025-2 《网络攻防实践》第二周作业

网络信息收集技术 实验要求 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 (2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地…

06. SPI通信

一、SPI通信协议简介SPI 是 Serial Peripheral interface 缩写,顾名思义就是串行外围设备接口。SPI 通信协议是 Motorola 公司首先在其 MC68HCXX 系列处理器上定义的。SPI 接口是一种高速的全双工同步的通信总线。SCK(Serial Clock)时钟信号,由主设备产生。 MOSI(Master O…

20241118戴子涵猜数字

# 学号 2024-2025-2 《Python程序设计》实验1报告 课程:《Python程序设计》 班级: 2411 姓名: 戴子涵 学号:20241118 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 此处填写实验的具体内容; import random print(""" 😍😍…

SkekchUp Pro 2024下载与安装教程

SketchUp Pro 2024作为一款专业的3D建模软件,在建筑设计、城市规划和室内设计等领域具有广泛的应用前景. ‌安装SketchUp Pro 2024的基本要求包括操作系统、处理器、内存、显卡等方面的要求。‌ 操作系统要求‌Windows系统‌:SketchUp Pro 2024支持Windows 10和Windows 11操作…

理解GET和POST区别的全面指南

在使用API时,两个最常用的HTTP方法是GET和POST。那么这两者究竟有什么区别呢?在本文中,我们将澄清GET和POST之间的区别,重点介绍它们的独特属性和适用的用例。 REST API原理与API通信 要理解GET和POST的作用,首先需要理解REST API的原理及其如何操作。REST(表现层状态转移…