蓝桥杯备赛之二分专题

常用的算法二分模板

1. 在数组a[]中找大于等于x的第一个数的下标

//int ans = lower_bound(a, a + n, x) - a
//相当于下方
int l = 0, r = n - 1;
while(l < r) {int mid = l + r >> 1;if(a[mid] >= x)	r = mid;else l = mid + 1;
}
cout << r;

2. 在数组a[]中找大于x的第一个数的下标

//int ans = upper_bound(a, a + n, x) - a
//相当于下方
int l = 0, r = n - 1;
while(l < r) {int mid = l + r + 1 >> 1;if(a[mid] <= x) l = mid;else r = mid + 1;
}
cout << r;

例题

503.借教室

题目

在这里插入图片描述

在这里插入图片描述

思路

二分_借教室.png

代码
//根据题意:有单调性,区间操作  二分+差分
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 1e6 + 10;
int r[N], d[N], s[N], t[N];
LL b[N];    //差分数组
int n, m;
bool check(int mid) {for(int i = 1; i <= n; i++) b[i] = r[i] - r[i - 1]; //初始化差分数组for(int i = 1; i <= mid; i++) {b[s[i]] -= d[i];b[t[i] + 1] += d[i];}for(int i = 1; i <= n; i++ ) {b[i] += b[i - 1];if(b[i] < 0)    return true;}return false;
}
int main() {scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) scanf("%d", &r[i]);for(int i = 1; i <= m; i++) scanf("%d%d%d", &d[i], &s[i], &t[i]);int l = 1, r = m;if(!check(m)) {puts("0");return 0;}while(l < r) {int mid = l + r >> 1;if(check(mid))  r = mid;else l = mid + 1;}printf("-1\n%d", r);return 0;
}

5407.管道

题目

在这里插入图片描述

代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100010;
typedef long long LL;
int n, len;
int l[N], s[N];
pair<int, int> q[N];
bool check(LL mid) {    //mid为当前时间int cnt = 0;for(int i = 1; i <= n; i++) {if(s[i] <= mid)  {// q[cnt++] = {mid - s[i], mid + s[i]};    别忘了区间长度限制int d = mid - s[i];LL L = max(1, l[i] - d), R = min((LL)len, (LL)l[i] + d);q[cnt++] = {L, R};}}sort(q, q + cnt);int st = -1, ed = -1;for(int i = 0; i < cnt; i++) {//这里是 ed+1 因为需要的是每个节点有水,相当于“相连”if(q[i].first <= ed + 1)    ed = max(ed, q[i].second);else {st = q[i].first, ed = q[i].second;}}return st == 1 && ed == len;
}
int main() {scanf("%d%d", &n, &len);for(int i = 1; i <= n; i++)scanf("%d%d", &l[i], &s[i]);LL l = 0, r = 2e9;      //最坏情况是2e9while(l < r) {LL mid = l + r >> 1;if(check(mid))  r = mid;else l = mid + 1;}cout << r;return 0;
}

(多路合并)

1262.鱼塘钓鱼

在这里插入图片描述

思路

在这里插入图片描述

枚举最后一次钓鱼的鱼塘, 传入参数(第k个鱼塘, 钓鱼时间)

代码如下
#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
int T, n;
int s[N], d[N], t[N], spend[N];  
int get_fish(int k) {   //在第k个鱼塘当前能钓鱼数量return max(0, s[k] - spend[k] * d[k]);
}
int work(int n, int T) {int res = 0;memset(spend, 0, sizeof spend);for(int i = 0; i < T; i++) {    //一共枚举T次,T分钟则可选择钓T次int t = 1;  //循环判断哪个鱼塘当前能钓鱼数最多for(int j = 2; j <= n; j++)if(get_fish(j) > get_fish(t))t = j;res += get_fish(t);  //答案加上此时钓鱼数量spend[t]++;     //当前鱼塘钓鱼时间++}return res;
}
int main () {scanf("%d", &n);for(int i = 1; i <= n; i++)  scanf("%d", &s[i]);for(int i = 1; i <= n; i++)  scanf("%d", &d[i]);    //走到第一个鱼塘不用时间for(int i = 2; i <= n; i++) cin >> t[i], t[i] += t[i - 1];cin >> T;int res = 0;// 枚举最后走到哪个鱼塘for(int i = 1; i <= n; i++) res = max(res, work(i, T - t[i]));  //最后走到第i个鱼塘,钓鱼时间为T-t[i]cout << res;return 0;
}
4656.技能升级
题目:

在这里插入图片描述

思路分析:

在这里插入图片描述

在这里插入图片描述

代码和注释具体如下
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 100010;
int n, m;
int a[N], b[N];
bool check(int mid) {LL res = 0;for(int i = 0; i < n; i++)if(a[i] >= mid)res += (a[i] - mid) / b[i] + 1; //对于第i个技能所加的次数 :差值 / 公差 + 1,因为差值为0时,还需要加一次if(res >= m)  return true;    //判断对于最后一次为mid值所对应加技能的总次数是否满足要求m次return false;
}
int main() {scanf("%d%d", &n, &m);//m 的范围太大, 故从n下手,也就是枚举加的技能点值,二分答案for(int i = 0; i < n; i++)  scanf("%d%d", &a[i], &b[i]);int l = 0, r = 1e6;     //左右边界(最后一次(m)加的技能点)while(l < r) {// l 和 r 的更新,***关键***//这里的话由于所加技能点是从大到小排序进行选择的,故答案必然是[mid,...]的区间(mid对应的值可能不止一个),而小于mid的不符合int mid = l + r + 1 >> 1;if(check(mid))  l = mid;else r = mid - 1;}LL res = 0, cnt = 0;    //次数,答案for(int i = 0; i < n; i++) {if(a[i] > r) {  // r 即为最后一次加的技能点数int s = (a[i] - r) / b[i] + 1;  //第i个技能所加次数int an = a[i] - (s - 1) * b[i]; //最后一次升级的点数res += (LL)(a[i] + an) * s / 2;     //等差数列公式求出所加技能点和cnt += s;   //累加加技能次数}}LL ans = res - (cnt - m) * r;   //最后一个数值可能加的次数不止一次,故需要特殊处理cout << ans;return 0;
}

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

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

相关文章

详解Rust的连贯性和孤儿规则

最近学习Rust时候看到两个术语&#xff1a;连贯性(Coherence)和孤儿规则(Orphan rules)&#xff0c;书上解释的不是很清楚&#xff0c;又没有给出具体的代码示例&#xff0c;让人很难理解。我在网上搜了好久&#xff0c;最后又查了Rust语言规范&#xff0c;算是搞明白了这两个概…

qml中toolbox控件、ComboBox控件、PlainText实现及美化

一. 内容简介 qml中toolbox控件、ComboBox控件、PlainText实现及美化 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 2.3pytorch 安装pytorch(http://t.csdnimg.cn/GVP23) 2.4QT 5.14.1 新版QT6.4,&#xff0c;6.5在线安装经常失败&#xff0c;而5.9版本…

[蓝桥杯 2019 省 B] 等差数列

题目链接 [蓝桥杯 2019 省 B] 等差数列 题目描述 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列&#xff0c;只记得其中 N N N 个整数。 现在给出这 N N N 个整数&#xff0c;小明想知道包含这 N N N 个整数的最短的等差数列有几项&#x…

亚马逊运营要使用什么海外代理IP?

代理IP作为网络活动的有力工具&#xff0c;同时也是跨境电商的必备神器。亚马逊作为跨境电商的头部平台&#xff0c;吸引了大量的跨境电商玩家入驻&#xff0c;想要做好亚马逊&#xff0c;养号、测评都需要代理IP的帮助。那么应该使用什么代理IP呢&#xff1f;如何使用&#xf…

复杂系统未来演化很难准确预测

复杂系统的未来演化很难准确预测。这是由于复杂系统包含大量相互作用的组成部分&#xff0c;其行为和发展受到多种因素的影响&#xff0c;包括内部动力、外部环境变化以及意外事件等。此外&#xff0c;复杂系统通常呈现非线性关系&#xff0c;即系统的变化可能以不可预测的方式…

JS-02-javaScript快速入门

一、javaScript代码的编写位置 JavaScript代码可以直接嵌在网页的任何地方&#xff0c;但是一般&#xff0c;我们用如下编写方式。 1-1、直接写到HTML文件中 通常我们都把JavaScript代码放到<head>中&#xff0c;由<script>...</script>包含的代码就是Java…

【深度学习】1. 深度学习概述

感知器模型 人脑中的神经元:一个神经元通常具有多个树突&#xff0c;主要用来接受传入信息;而轴突只有一条&#xff0c;轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接&#xff0c;从而传递信号。 而在计算机的神经网络中&#xff…

985硕的4家大厂实习与校招经历专题分享(part2)

我的个人经历&#xff1a; 985硕士24届毕业生&#xff0c;实验室方向:CV深度学习 就业&#xff1a;工程-java后端 关注大模型相关技术发展 校招offer: 阿里巴巴 字节跳动 等10 研究生期间独立发了一篇二区SCI 实习经历:字节 阿里 京东 B站 &#xff08;只看大厂&#xff0c;面试…

【leetcode刷刷】455.分发饼干 、376. 摆动序列 、53. 最大子序和

455.分发饼干 376. 摆动序列 其实贪心的想法&#xff0c;做过一次的话就不会很难想了。但这道题需要考虑的特殊情况比较复杂&#xff0c;包括平台什么的。最左边和最右边也需要考虑&#xff1a;最左边&#xff0c;添加一个平台。 可以假设&#xff0c;数组最前面还有一个数字…

Mysql - is marked as crashed and should be repaired

概述 上周发生了一个Mysql报错的问题&#xff0c;今天有时间整理一下产生的原因和来龙去脉&#xff0c;Mysql的版本是5.5,发生错误的表存储引擎都是MyISAM,产生的报错信息是Table xxxxxx is marked as crashed and should be repaired。 定位问题 产生的后果是Nginx服务没有…

Unity骚操作: Exception堆栈追踪

Exception堆栈追踪 上代码 try{SaveData saveData SaveLoadManager.Load(migrate: false);if (saveData ! null){Version v new Version(saveData.gameVersion);Version v2 new Version(Cheats.version);if (v < v2){SaveLoadManager.MigrationBackupLocalSave();SaveL…

C++入门知识点

文章目录 一、C的域作用限定符1.1全局域1.2限定域作用范围 二、C的命名空间域2.1单个命名空间的变量访问和单个不同命名空间的相同变量名的访问2.2命名空间的嵌套调用 三、C的流插入、流提取操作符四、C的缺省参数4.1函数的全缺省4.1函数的部分缺省 五、C的函数重载5.1函数重载…

【操作系统学习笔记】文件管理1.5

【操作系统学习笔记】文件管理1.5 参考书籍: 王道考研 视频地址: Bilibili 逻辑结构 VS 物理结构 逻辑结构: 从用户角度看&#xff0c;由创建文件的用户自己设计的 无结构文件 // 在用户看来是一篇连续的空间 FILE *fp fopen("test.txt", "r"); if (fp …

【算法集训】基础算法:模拟

一、基本理解 顾名思义&#xff0c;就是题目要求做什么&#xff0c;代码中就跟着做就可以。 二、题目练习 1252. 奇数值单元格的数目 根据题目要求列出如下代码。需要注意填充列和行的时候注意下标。 int oddCells(int m, int n, int** indices, int indicesSize, int* in…

this关键字

this关键字 this 是 Java 的一个关键字&#xff0c;表示某个对象 this 可以出现在构造方法、实例方法中&#xff0c;但不可以出现在类方法中 出现在构造方法中&#xff0c;代表使用该构造方法创建的对象出现在实例方法中&#xff0c;代表正在调用该方法的当前对象 一、构造…

Docker-容器网络互联

目录 1 前言 2 常用指令 3 实现容器互联 3.1 自定义网络 3.2 让容器连接创建的网络 3.2.1 容器创建后连接网络 3.2.2 容器创建时连接网络 3.3 尝试使用容器名访问(测试) 1 前言 在默认情况下&#xff0c;docker中的容器都是连接到一个虚拟的网桥上的&#xff0c;这为独…

关于yolov8的DFL模块(pytorch以及tensorrt)

先看代码 class DFL(nn.Module):"""Integral module of Distribution Focal Loss (DFL).Proposed in Generalized Focal Loss https://ieeexplore.ieee.org/document/9792391"""def __init__(self, c116):"""Initialize a convo…

Spring MVC PathVariableMethodArgumentResolver原理解析

在Spring MVC中&#xff0c;PathVariableMethodArgumentResolver是一个非常重要的组件&#xff0c;它负责解析URL路径中的变量并将其绑定到处理器方法的参数上。通过PathVariable注解&#xff0c;开发者可以方便地从URL中提取参数值&#xff0c;并传递给后端逻辑进行处理。本文…

【Web前端入门学习】—CSS

目录 CSS简介CSS语法CSS三种导入方式CSS选择器元素选择器&#xff08;标签选择器&#xff09;类选择器ID选择器通用选择器子元素选择器后代选择器&#xff08;包含选择器&#xff09;并集选择器&#xff08;兄弟选择器&#xff09;伪类选择器伪元素选择器 CSS常用属性盒子模型网…

电脑工作电压是多少你要看看光驱电源上面标的输入电压范围

要确定电脑的工作电压&#xff0c;必须查看电源上标注的输入电压范围。 国内法规规定民用220V电压范围为10%-15%&#xff0c;也就是说通信220V电压正常范围为187--242V&#xff0c;供电设备一般为180V。 --250V电压范围&#xff0c;即正常情况下电脑电源电压不低于187V即可工作…