复活之我会二分

news2025/4/8 10:57:51

文章目录

      • 整数二分模板
          • 模板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.coloradmin.cn/o/2330424.html

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

相关文章

NOA是什么?国内自动驾驶技术的现状是怎么样的?

国内自动驾驶技术的现状如何&#xff1f; 汽车的NOA指的是“Navigate on Autopilot”&#xff0c;即导航辅助驾驶或领航辅助驾驶。这是一种高级驾驶辅助系统&#xff08;ADAS&#xff09;的功能&#xff0c;它允许车辆在设定好起点和终点后&#xff0c;自动完成行驶、超车、变…

Linux 指令初探:开启终端世界的大门

前言 当我们初次接触 Linux&#xff0c;往往会被一串串在黑底屏幕中跳动的字符震撼甚至吓退。然而&#xff0c;正是这些看似晦涩的命令&#xff0c;构建了服务器、嵌入式系统乃至云计算的世界。 本篇将带你从最基础的 Linux 指令开始&#xff0c;逐步揭开命令行的神秘面纱。从…

Edge浏览器IE兼容模式设置

一、了解Edge浏览器的IE模式 Microsoft Edge&#xff0c;作为微软推出的新一代浏览器&#xff0c;不仅拥有更快的浏览速度、更强大的安全性能以及更现代的界面设计&#xff0c;还巧妙地解决了与旧网站和应用程序的兼容性问题。通过内置的IE模式&#xff0c;Edge能够模拟IE浏览器…

算法初识-时间复杂度空间复杂度

注&#xff1a;观看Adbul Bari算法视频 算法概念 算法&#xff1a;先验分析&#xff0c;不依托于硬件&#xff0c;无语言限制&#xff0c;逻辑。 程序&#xff1a;后验测试&#xff0c;依托硬件&#xff0c;语言限制&#xff0c;实现。 特点&#xff1a; 输入-0或多个输出-至…

Python高阶函数-sorted(深度解析从原理到实战)

一、sorted()函数概述 sorted()是Python内置的高阶函数&#xff0c;用于对可迭代对象进行排序操作。与列表的sort()方法不同&#xff0c;sorted()会返回一个新的已排序列表&#xff0c;而不改变原数据。 基本语法 sorted(iterable, *, keyNone, reverseFalse)二、核心参数详…

Vue3实战三、Axios封装结合mock数据、Vite跨域及环境变量配置

目录 Axios封装、调用mock接口、Vite跨域及环境变量配置封装Axios对象调用mock接口数据第一步、安装axios&#xff0c;处理一部请求第二步、创建request.ts文件第三步、本地模拟mock数据接口第四步、测试axiosmock接口是否可以调用第五步、自行扩展 axios 返回的数据类型 axios…

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

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

【Linux】虚拟机设置静态IP

主播我今天下午学了几节微服务课&#xff0c;上课的时候&#xff0c;直接把手机拿走了去上课&#xff08;电脑连的我手机的热点&#xff09;&#xff0c;虚拟机没关&#xff0c;晚上主播我回来继续学&#xff0c;电脑连上热点之后&#xff0c;发现虚拟机连接不上了&#xff0c;…

职坐标解析自动驾驶技术发展新趋势

内容概要 作为智能交通革命的核心驱动力&#xff0c;自动驾驶技术正以惊人的速度重塑出行生态。2023年&#xff0c;行业在多传感器融合与AI算法优化两大领域实现突破性进展&#xff1a;激光雷达、摄像头与毫米波雷达的协同精度提升至厘米级&#xff0c;而深度学习模型的实时决…

局域网:电脑或移动设备作为主机实现局域网访问

电脑作为主机 1. 启用电脑的网络发现、SMB功能 2. 将访问设备开启WIFI或热点&#xff0c;用此电脑连接&#xff1b;或多台设备连接到同一WIFI 3. 此电脑打开命令行窗口&#xff0c;查看电脑本地的IP地址 Win系统&#xff1a;输入"ipconfig"&#xff0c;回车后如图 4.…

小型园区组网图

1. 在小型园区中&#xff0c;S5735-L-V2通常部署在网络的接入层&#xff0c;S8700-4通常部署在网络的核心&#xff0c;出口路由器一般选用AR系列路由器。 2. 接入交换机与核心交换机通过Eth-Trunk组网保证可靠性。 3. 每个部门业务划分到一个VLAN中&#xff0c;部门间的业务在C…

数据分享:汽车测评数据

说明&#xff1a;如需数据可以直接到文章最后关注获取。 1.数据背景 Car Evaluation汽车测评数据集是一个经典的机器学习数据集&#xff0c;最初由 Marko Bohanec 和 Blaz Zupan 创建&#xff0c;并在 1997 年发表于论文 "Classifier learning from examples: Common …

批量将 txt/html/json/xml/csv 等文本拆分成多个文件

我们的文本文件太大的时候&#xff0c;我们通常需要对文本文件进行拆分&#xff0c;比如按多少行一个文件将一个大的文本文件拆分成多个小的文本文件。这样我们在打开或者传输的时候都比较方便。今天就给大家介绍一种同时对多个文本文件进行批量拆分的方法&#xff0c;可以快速…

Vue3 路由权限管理:基于角色的路由生成与访问控制

Vue3 路由权限管理&#xff1a;基于角色的路由生成与访问控制 一、核心概念 1.1 大致流程思路&#xff1a; 用户在登录完成的时候&#xff0c;后端给出一个此登录用户对应的角色名字&#xff0c;此时可以将这个用户的角色存起来(vuex/pinia)中&#xff0c;在设置路由时的met…

忘记mysql的root用户密码(已解决)

1、打开数据库可视化界面&#xff08;比如MySQL workbench&#xff09; 2、执行select host,user,authentication_string from mysql.user; 3、把‘authentication_string’下面的字段 复制到MD5在线解密网页中&#xff08;比如md5在线解密&#xff09;

ubuntu 20.04 编译和运行SC-LeGo-LOAM

1.搭建文件目录和clone代码 mkdir -p SC-LeGo-LOAM/src cd SC-LeGo-LOAM/src git clone https://github.com/AbangLZU/SC-LeGO-LOAM.git cd .. 2.修改代码 需要注意的是原作者使用的是Ouster OS-64雷达&#xff0c;需要更改utility.h文件中适配自己的雷达类型&#xff0c;而…

CentOS 7安装hyperscan

0x00 前言 HyperScan是一款由Intel开发的高性能正则表达式匹配库&#xff0c;专为需要快速处理大量数据流的应用场景而设计。它支持多平台运行&#xff0c;包括Linux、Windows和macOS等操作系统&#xff0c;并针对x86架构进行了优化&#xff0c;以提供卓越的性能表现。HyperSc…

UE5 Simulation Stage

首先将Grid2D创建出来&#xff0c;然后设置值&#xff0c;Grid2D类似于在Niagara系统中的RenderTarget2D&#xff0c;可以进行绘制&#xff0c;那么设置大小为512 * 512 开启Niagara粒子中的Simulation Stage 然后开始编写我们的自定义模块 模块很简单&#xff0c;TS就是Textur…

Swift 解 LeetCode 250:搞懂同值子树,用递归写出权限系统检查器

文章目录 前言问题描述简单说&#xff1a;痛点分析&#xff1a;到底难在哪&#xff1f;1. 子树的概念搞不清楚2. 要不要“递归”&#xff1f;递归从哪开始&#xff1f;3. 怎么“边遍历边判断”&#xff1f;这套路不熟 后序遍历 全局计数器遍历过程解释一下&#xff1a;和实际场…

增益调度控制 —— 理论、案例与交互式 GUI 实现

目录 增益调度控制 —— 理论、案例与交互式 GUI 实现一、引言二、增益调度控制的基本原理三、数学模型与公式推导四、增益调度控制的优势与局限4.1 优势4.2 局限五、典型案例分析5.1 案例一:航空飞行控制中的增益调度5.2 案例二:发动机推力控制中的增益调度5.3 案例三:化工…