二分答案

article/2025/9/19 12:37:14

二分答案

总所周知,二分法查找一个数的时间复杂度为O(log n),所以在int范围内找一个数最多只需要30余次,在longlong范围内最多也只需要60余次。因此,我们可以利用二分这一优势查找答案。即,每次二分后判断该数是不是满足题目要求。

代码

const int N = 0x3f3f3f3f;
int main()
{int ans, l, r;int l = a, r = b;//a为上限,b为下限while (l <= r){mid = (l + r) / 2;if (check(mid))/*判断二分得到的mid是不是满足题目要求,并且将二分的上限或下限相对应的缩小*/{ans = mid;mid = l + 1;}elsemid = r - 1;}cout << ans << endl;return 0;
}

下面以三道题目为例

1.吉首大学新星杯

(ps:这道题现在应该不能交了)
在这里插入图片描述
在这里插入图片描述

这道题n个整数表示樱花的高度,然后问你最小速度为多少时,所有樱花都可以在m秒内飘落完

二分代码:(由于该题评测关闭,不确定代码正确性):

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 0x3f3f3f3f;
int p[2000005];
int main()
{ll n, m, ans;cin >> n >> m;for (int i = 0; i < n; i++)scanf("%d", &p[i]);ll l = 1, r = N, mid;while (l <= r){mid = (l + r) / 2;ll sum = 0;for (ll i = 0; i < n; i++){sum += p[i] / mid;if (p[i] % mid != 0)sum++;}if (sum <= m){ans = mid;r = mid - 1;}elsel = mid + 1;}cout << ans << endl;return 0;
}

2.POJ2456

Aggressive cowsDescription
Farmer John has built a new long barn, with 
N (2 <= N <= 100,000) stalls. 
The stalls are located along a straight 
line at positions x1,...,xN (0 <= xi <= 1,000,000,000).His C (2 <= C <= N) cows don't like this barn layout and
become aggressive towards each other once put into a 
stall. To prevent the cows from hurting each other, 
FJ want to assign the cows to the stalls, such that the
minimum distance between any two of them is as large as
possible. What is the largest minimum distance?Input
* Line 1: Two space-separated integers: N and C* Lines 2..N+1: Line i+1 contains an integer stall 
location, xiOutput
* Line 1: One integer: the largest minimum distanceSample Input
5 3
1
2
8
4
9Sample Output
3Hint
OUTPUT DETAILS:FJ can put his 3 cows in the stalls at positions 
1, 4 and 8, resulting in a minimum distance of 3.Huge input data,scanf is recommended.

这题告诉你有n个隔间,然后有m头牛,一头牛住一个隔间,将m头牛分得尽可能开之后,两头牛的最小距离是多少

二分代码:

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 0x3f3f3f3f;
int p[100005];
int main()
{int n, m;cin >> n >> m;for (int i = 0; i < n; i++)scanf("%d", &p[i]);sort(p, p + n);ll l = 0, r = p[n - 1] - p[0], ans;while (l <= r){ll mid =(l+r)/2;ll sum = 0;int t = 0;for (int i = 0; i < n; i++){if (p[i] - p[t] >= mid){t = i;sum++;}}if (sum + 1 >= m){ans = mid;l = mid + 1;}elser = mid - 1;}cout << ans << endl;return 0;
}

3.计蒜客 存款

在这里插入图片描述
银行存钱问题,给你三个整数pytp:一年存钱可以获得的利息,y总共的年数,t最后获得的最少金额。问:小明最少每年投入多少钱,才能在y年后拥有至少t元。(小明每年将上一年的本金加利息一并存入银行)
坑点:上面两道题的二分答案的判断过程 即模板中的check过程都可以算完,最后再与题目要求比较,但是这道题会爆long long,所以我们每算一次sum就判断是不是超过最后所要拥有的金额t,如果是,那么直接跳出判断过程。
二分代码:

#include <bits/stdc++.h>
using namespace std;int main()
{long long y, t;double p;cin >> p >> y >> t;long long l = 1, r = t, mid, ans;while (l <= r){int flag = 0;mid = (l + r) / 2;long long sum = 0;for (long long i = 1; i <= y; i++){sum = (sum + mid) * (100 + p) / 100;if (sum >= t){flag = 1;break;}}if (flag){ans = mid;r = mid - 1;}elsel = mid + 1;}cout << ans << endl;return 0;
}

http://chatgpt.dhexx.cn/article/sOhTLoHj.shtml

相关文章

初探二分算法

又来算法了~~~~ &#x1f603;&#x1f603;&#x1f606;&#x1f606;&#x1f603;&#x1f603;&#x1f603;&#x1f606;&#x1f606;&#x1f606;&#x1f440;&#x1f440;&#x1f606;&#x1f914; 什么是二分算法&#xff1f; 在计算机科学中&#xff0c;二分…

二分(数学背景,边界问题,二分查找,二分答案)

二分法的数学背景 目的 关于二分法的目的&#xff0c;这里引用同济大学数学系出版的《高等数学》第七版上册中关于二分法的相关内容。&#xff08;文段内容多&#xff0c;要有一点耐心~&#xff09; 在科学技术问题中&#xff0c;经常会遇到 求解高次代数方程或其他类型的方程的…

二分模板介绍

以一个典型例题来介绍二分法的两个通用模板&#xff0c;熟练掌握这两个模板可以解决绝大部分二分的问题。 例题&#xff1a;ACWing 789.数的范围 给定一个按照升序排列的长度为n的整数数组&#xff0c;以及q个查询。 对于每个查询&#xff0c;返回一个元素k的起始位置和终止…

二分算法详细解析

二分 有单调性一定可以二分&#xff0c;可以二分不一定有单调性二分的本质是边界不是单调性(单调一定可以二分&#xff0c;不单调的有的也可以二分) 本质&#xff1a;在一个区间上&#xff0c;找到某种性质&#xff0c;每次可以将区间一分为二&#xff08;存在边界&#xff09;…

一篇文章带你搞懂二分

一篇文章教你搞懂二分 二分整数二分实数域上二分二分查找二分答案 二分 到底什么是二分呢&#xff1f;二分二分就是一分为二。简单来说二分就是在有序序列中&#xff0c;通过不断的二分&#xff0c;进而不断地缩小范围去寻找满足我们条件的解。这只是对二分一个狭义上的理解&a…

深入字节版atop: 线上系统的性能监控实践

背景 atop 是一款开源的单机性能监测工具&#xff0c;支持实时观测的同时、也支持读取历史文件排查问题。另外一个优点是除提供 CPU、MEM、DISK 等全局指标外&#xff0c;还提供进程、线程级别的各项指标监控数据。鉴于 atop 的这些优点&#xff0c;字节跳动基于社区的 atop 进…

atop备忘

atop 安装 sudo apt install atop atop 参数说明 监控界面字段说明 ATOP列&#xff1a;该列显示了主机名、信息采样日期和时间点 PRC列&#xff1a;该列显示进程整体运行情况 sys、usr字段分别指示进程在内核态和用户态的运行时间 #proc字段指示进程总数 #zombie字段指示僵…

atop linux,每天学一个 Linux 命令(117):atop

命令简介 atop 命令是一款监控 Linux 系统资源与进程的工具&#xff0c;非内部命令&#xff0c;需要安装。[rootcentos7 ~]# atop -bash: atop: command not found [rootcentos7 ~]# yum install atop -y #Debian && Ubuntu apt-get install atop #Fedora dnf install …

linux 系统性能 检测 命令 atop

atop 主要可以 监测 cpu,内存&#xff0c;硬盘&#xff0c;网络性能&#xff0c;以及 实时读写 日志。 基本用法 1.查看 atop , 实时刷新 按 a ,退出 按q 2.保存日志 atop -w log.txt 3.查看 输出日志 atop -r log.txt &#xff0c; 按 t 查看 下一个样本的性能数据 &a…

Atop使用场景

问题&#xff1a; 1、线上容器环境pod报错无法创建本地线程&#xff0c;如下图所示&#xff1a; 2、日志中出现报错信息 “fork&#xff1a;Cannot allocate memory”。如下图所示&#xff1a; 可能原因 1、内存不够 2、可能是进程数超限导致。系统内部的总进程数达到了 p…

atop工具使用

atop是linux系统下一款监控系统资源与进程的工具。atop以一定的频率记录系统的运行状态,通过它可以了解系统今生前世。atop采集系统资源「cpu、mem、disk、net」的使用情况及所有进程使用系统资源的情况,定期采集相关数据保存日志文件。可以通过atop.daily文件调整数据采集的…

atop安装和使用

atop就是一款用于监控Linux系统资源与进程的工具&#xff0c;它以一定的频率记录系统的运行状态&#xff0c;所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况&#xff0c;并能以日志文件的方式保存在磁盘中。atop是一款开源软件&#xff0c;目前最新版…

linux 之atop 系统监控工具

一、atop介绍 atop是一款用于监控Linux系统资源与进程的工具&#xff0c;它以一定的频率记录系统的运行状态&#xff0c;所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况&#xff0c;并能以日志文件的方式保存在磁盘中&#xff0c;服务器出现问题后&a…

Linux 使用 atop 监控工具

文章目录 应用场景操作步骤安装 atop配置并启动 atop编辑atop配置文件启动atop 分析atop停止atop 应用场景 atop 是一款用于监控 Linux 系统资源与进程的工具&#xff0c;以一定的频率记录系统的运行状态&#xff0c;采集系统资源&#xff08;CPU、内存、磁盘和网络&#xff0…

codeblocks中文包

kdevelop因为python 2.6.2 而不是要求的<2.6的缘故不可以显示出automake。 而删除&#xff12;.6的结果是&#xff11;&#xff13;&#xff12;个包同时要卸载&#xff0c;感觉其中不乏kde桌面的东东&#xff0c;遂放弃&#xff0c;转而投向codeblocks怀抱。 /usr/share/c…

codeblocks使用

原文来源&#xff1a;http://www.cnblogs.com/hackergodness/archive/2011/05/26/2059268.html 原手册下载&#xff1a; http://www.codeblocks.org/docs/manual_en.pdf 译者&#xff1a;JGood(http://blog.csdn.net/Jgood ) 译者言&#xff1a;工欲善其事&#xff0c;必先利其…

CodeBlocks安装及使用

Code::Blocks是一个开放源码的全功能的跨平台C/C集成开发环境&#xff0c;由纯碎的C语言开发完成&#xff0c;使用了著名的图形界面库wxWidgets。由于最近上机指导&#xff0c;学校ACM推荐同学们用的是这款软件&#xff0c;故而对其安装及使用进行一些记录。 一、Code::Blocks…

Code::Blocks介绍

软件类型&#xff1a;编程软件 软件性质&#xff1a;免费软件 操作系统&#xff1a;veket 应用平台&#xff1a;veket全系列 网站链接&#xff1a;http://www.codeblocks.org Code::Blocks 是一个开放源码的全功能的跨平台C/C集成开发环境.   相比于基于Delphi的Dev-C共享 CI…

Codeblock汉化教程

#Codeblock汉化教程 我猜许多人和我一样每次拿到一个IDE都不太懂上边的英文是什么意思&#xff0c;而且现在大多数的IDE都没有汉化用起来感觉很麻烦&#xff0c;可能是我用的太少了。最近在练习一些C的东西觉得Codeblock这个IDE用起来比较方便&#xff0c;但是满篇的英文看的我…

codeblock图形界面编程(十)文件操作

目录 codeblock图形界面编程&#xff08;十&#xff09;文件操作C语言的文件管理文件指针文件打开 文件关闭文件读文件写 图形界面的文件操作管理配置libcomdlg32.a库系统功能的实现 codeblock图形界面编程&#xff08;十&#xff09;文件操作 打开我们的计算机&#xff0c;无…