复活之我会二分

文章目录

      • 整数二分模板
          • 模板1:满足条件的第一个数
          • 模板2:满足条件的最后一个数
      • 浮点数二分模板
      • 一、Building an Aquarium
          • 思路分析
          • 具体代码
      • 二、Tracking Segments
          • 思路分析
          • 具体代码
      • 三、Wooden Toy Festival
          • 思路分析
          • 具体代码
      • 四、路标设置
          • 思路分析
          • 具体代码
      • 五、木材加工
          • 思路分析
          • 具体代码

整数二分模板

模板1:满足条件的第一个数
int bianrysearch(int l, int r) {while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else  l = mid + 1;} return l;
}
模板2:满足条件的最后一个数
int bianrysearch(int l, int r) {while (l < r) {int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else  r = mid - 1;}return l;
}

浮点数二分模板

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

一、Building an Aquarium

Building an Aquarium

思路分析

二分

具体代码
#include <cstdio>
#include <iostream>using namespace std;
typedef long long ll;const int N = 2e5 + 10;
ll t, n, x;
ll a[N];bool check(ll mid) {ll sum = 0;for (int i = 1; i <= n; i++){if (a[i] < mid) sum += mid - a[i];}	return sum <= x;
}int main() {scanf("%lld", &t);while (t--) {scanf("%lld%lld", &n, &x);for (int i = 1; i <= n; i++) {scanf("%lld", &a[i]);}ll l = 1, r = 2e9 + 10;while (l < r) {ll mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}printf("%lld\n", l);}return 0;
}

二、Tracking Segments

Tracking Segments

思路分析

二分+前缀和

具体代码
#include <cstdio>
#include <iostream>
#include <cstring>using namespace std;typedef long long ll;const int N = 1e5 + 10;int t, n, m, q;
int s[N], pos[N];
ll preSum[N];struct node{int x, y;
}a[N];bool check(int mid) {for (int i = 1; i <= n; i++) s[i] = 0;for (int i = 1; i <= mid; i++)	s[pos[i]] = 1;for (int i = 1; i <= n; i++) {preSum[i] = preSum[i - 1] + s[i];}for (int i = 1; i <= m; i++) {if (2 * (preSum[a[i].y ] - preSum[a[i].x - 1]) > a[i].y - a[i].x + 1)	return true;}return false;
}int main() {cin >> t;while(t--) {cin >> n >> m;for (int i = 1; i <= m; i++) {cin >> a[i].x >> a[i].y;}cin >> q;for (int i = 1; i <= q; i++) {cin >> pos[i];}if (!check(q)) {puts("-1");continue;}	int l = 1, r = q;while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << l << endl;}return 0;
}

三、Wooden Toy Festival

Wooden Toy Festival

思路分析

二分

具体代码
#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;const int N = 2e5 + 10;int t, n;
int a[N];bool check(int mid) {int idx = 0, t1 = a[0] + 2 * mid;while (a[idx] <= t1 && idx < n) idx++;t1 = a[idx] + 2 * mid;while (a[idx] <= t1 && idx < n) idx++;t1 = a[idx] + 2 * mid;while (a[idx] <= t1 && idx < n) idx++;if (idx == n) return true;return false;
}int main() {cin >> t;while (t--) {cin >> n;int l = 0, r; for (int i = 0; i < n; i++) {cin >> a[i];}sort(a, a + n);r = a[n - 1];while (l < r) {int mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}		cout << l << endl;}return 0;
}

四、路标设置

路标设置

思路分析

二分,注意check函数写法

具体代码
#include <cstdio>
#include <iostream>
#include <algorithm>using namespace std;typedef long long ll;const int N = 100000 + 10;
ll len, n, k;
ll a[N];bool check(int mid) {ll dif = 0;for (int i = 1; i < n; i++) {dif += (a[i] - a[i - 1] - 1) / mid;}return dif <= k;
}int main() {cin >> len >> n >> k;ll l = 1, r = len;for(int i = 0; i < n; i++) {cin >> a[i];} sort(a, a + n);while (l < r) {ll mid = l + r >> 1;if (check(mid)) r = mid;else l = mid + 1;}cout << l << endl;return 0;
}

五、木材加工

木材加工

思路分析

二分

具体代码
#include <cstdio>
#include <iostream>using namespace std;typedef long long ll;
const int N = 1e5 + 10;int n, k;
ll a[N];bool check(ll mid) {ll sum = 0;for (int i = 0; i < n; i++) sum += a[i] / mid;	return sum >= k;
}int main() {ll l = 0, r = 0;cin >> n >> k;for (int i = 0; i < n; i++) {scanf("%lld", &a[i]);r += a[i];} while(l < r) {ll mid = l + r + 1 >> 1;if (check(mid)) l = mid; else  r = mid - 1;}cout << l <<endl;return 0;
}

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

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

相关文章

每日c/c++题 备战蓝桥杯(握手问题)

试题 A: 握手问题 题解 题目描述 小蓝组织了一场算法交流会议&#xff0c;共有50人参加。按照惯例&#xff0c;每个人都要与除自己外的其他所有人握手一次。但有7个人彼此之间没有握手&#xff08;这7人与其他43人正常握手&#xff09;。求实际发生的握手总次数。 解题思路 …

mysql8.0.29 win64下载

mysql win64安装包 mysql win64安装包下载 mysql win64安装包下载 通过网盘分享的文件&#xff1a;mysql 链接: https://pan.baidu.com/s/1sEOl-wSVtOG5gfIRdt5MXw?pwdgi7i 提取码: gi7i

browser-use开源程序使 AI 代理可以访问网站,自动完成特定的指定任务,告诉您的计算机该做什么,它就会完成它。

一、软件介绍 文末提供程序和源码下载 browser-use开源程序使 AI 代理可以访问网站&#xff0c;自动完成特定的指定任务&#xff0c;浏览器使用是将AI代理与浏览器连接的最简单方法。告诉您的计算机该做什么&#xff0c;它就会完成它。 二、快速开始 使用 pip &#xff08;Py…

CAD格式转换器:Acme CAD Converter

Acme CAD Converter 是一款专业的多功能 CAD 文件管理工具&#xff0c;支持 ‌DWG/DXF/DWF 文件查看、批量格式转换及版本降级‌&#xff0c;适用于工程设计、图纸归档等场景‌。软件兼容 AutoCAD R2.5 至 2023 版本文件‌&#xff0c;可输出为 PDF、JPEG、TIFF、SVG 等 20 格式…

vmware虚拟机上Ubuntu或者其他系统无法联网的解决方法

一、检查虚拟机是否开启了网络服务 打开方式&#xff1a;控制面板->-管理工具--->服务 查找 VMware DHCP Service 和VMware NAT Service &#xff0c;确保这两个服务已经启动。如下图&#xff0c;没有启动就点击启动。 二、设置网络类型 我们一般使用前两种多一些&…

数据结构与算法:基础与进阶

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

使用分布式锁和乐观锁解决超卖问题

在电商、秒杀等高并发场景中&#xff0c;“超卖”问题指库存被过量扣减&#xff0c;导致实际库存不足。以下是使用 分布式锁 和 乐观锁 解决超卖问题的原理与实现方案&#xff1a; 一、超卖问题的核心原因 多个并发请求同时读取库存余量&#xff0c;并在本地计算后发起写操作&…

盛水最多的容器

本题有两种解法&#xff0c;一种是暴力解法&#xff0c;直接暴力枚举出所有的体积比较出最大的即可&#xff0c;但是时间复杂度达到n方。超出了限制&#xff0c;另一种解法就是利用单调性解法&#xff0c;我们着重介绍一下单调性解法。 单调性解法&#xff1a; 体积vh*w&…

操作系统概述(3)

批处理系统 1.单道批处理系统 单道批处理系统是成批地处理作用&#xff0c;并且始终只有一道作业在内存中的系统。优点&#xff1a;提高系统资源的利用率和系统吞吐量。缺点&#xff1a;系统中的资源得不到充分利用。 2.多道批处理系统 引入多道程序设计技术&#xff0c;是…

数字身份DID协议:如何用Solidity编写去中心化身份合约

本文提出基于以太坊的自主主权身份&#xff08;SSI&#xff09;实现方案&#xff0c;通过扩展ERC-734/ERC-735标准构建链上身份核心合约&#xff0c;支持可验证声明、多密钥轮换、属性隐私保护等特性。设计的三层架构体系将身份控制逻辑与数据存储分离&#xff0c;在测试网环境…

【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV2模型算法详解前言YOLOV2的模型结构YOLOV2模型的基本执行流程YOLOV2模型的网络参数YOLOV2模型的训练方式 YOLOV2的核心思想前向传播阶段反向传播阶段 总结 前…

第421场周赛:数组的最大因子得分、

Q1、数组的最大因子得分 1、题目描述 给你一个整数数组 nums。 因子得分 定义为数组所有元素的最小公倍数&#xff08;LCM&#xff09;与最大公约数&#xff08;GCD&#xff09;的 乘积。 在 最多 移除一个元素的情况下&#xff0c;返回 nums 的 最大因子得分。 注意&…

机器学习(神经网络基础篇)——个人理解篇5(梯度下降中遇到的问题)

在神经网络训练中&#xff0c;计算参数的梯度是关键步骤。numerical_gradient 方法旨在通过数值微分&#xff08;中心差分法&#xff09;计算损失函数对网络参数的梯度。然而&#xff0c;该方法的实现存在一个关键问题&#xff0c;导致梯度计算错误。 1、错误代码示例&#xf…

40常用控件_WindowFrame的影响

window frame 的影响 如果 widget 作为一个窗口(带有标题栏,最小化,最大化,关闭按钮),那么在计算尺寸和坐标的 时候就有两种算法.包含 window frame 和 不包含 window frame. 其中x(),y0,frameGeometry(), pos(),move() 都是按照包含 window frame 的方式来计算 的. 其中 geome…

Nginx搭建API网关服务教程-系统架构优化 API统一管理

超实用&#xff01;用Nginx搭建API网关服务&#xff0c;让你的系统架构更稳更强大&#xff01;&#x1f680; 亲们&#xff0c;今天来给大家种草一个超级实用的API网关搭建方案啦&#xff01;&#x1f440; 在如今的Web系统架构中&#xff0c;一个稳定、高性能、可扩展的API网…

USB设备老是提示有问题,如何解决

问题描述&#xff1a;有一台usb设备一旦不小心碰了下&#xff0c;后面就在右下角提示“无法识别的USB设备”“跟这台计算机连接的前一个USB设备0工作不正常&#xff0c;WIndows无法识别它”。我这个是明确知道那个设备&#xff0c;如果不知道也可以同样解决。 解决方法&#xf…

数据操作语言

一、DML的核心操作类型 1.添加数据(INSERT) (1)手动插入:逐行插入数据,适用于少量数据。 INSERT INTO 表名 (字段1, 字段2) VALUES (值1, 值2);(2)批量导入:通过外部文件导入数据,适用于大数据场景

【Python】案例:计算股票收益率和波动率

【Python】案例&#xff1a;计算股票收益率和波动率&#xff1a; 1、案例需求2、数据准备3、案例实现 1、案例需求 在分析股票数据时&#xff0c;我们需要从这些数据中得到一些关键指标进行评估&#xff0c;比如收益率、波动率&#xff0c;其中收益率又可以细分为简单收益率和…

geoserver搭建Docker一键直接安装并上传tif影像预览

geoserver搭建Docker一键直接安装 文章目录 geoserver搭建Docker一键直接安装前言一、Docker拉取Geoserver二、运行后使用geoserver进行数据管理进入geoserver调整语言登录geoserver上传一个tif影像建立工作空间并上传自己的tif数据建立图层预览 总结 前言 使用docker安装geos…

STM32看门狗应用实战:独立看门狗与窗口看门狗深度解析(下) | 零基础入门STM32第九十五步

主题内容教学目的/扩展视频看门狗什么是看门狗&#xff0c;原理分析&#xff0c;启动喂狗方法&#xff0c;读标志位。熟悉在程序里用看门狗。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、看门狗应用架构分析1.1 系统监控流程图1.2 双看门狗应用场景对比 二、…