蓝桥杯备赛之二分专题

常用的算法二分模板

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,一经查实,立即删除!

相关文章

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版本…

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

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

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;面试…

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服务没有…

C++入门知识点

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

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…

【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即可工作…

css相邻元素边框重合问题,解决方案

1、如下图所示&#xff0c;在给元素设置边框后&#xff0c;相邻元素会出现重合的问题 2、解决方案 给每个元素设置margin-top以及margin-left为负的边框 <div style"width: 300px;display: flex;flex-wrap: wrap;margin-top: 50px;"><div style"border…

【数据结构】二、线性表:5.静态链表的定义及其基本操作(定义、初始化、插入、查找、删除、遍历、长度、特点)

文章目录 5.静态链表5.1定义5.2初始化5.3插入5.4查找5.5删除5.6遍历5.7长度5.8特点 5.静态链表 静态链表是使用数组来模拟链表结构的一种数据结构&#xff0c;用数组的方式实现的链表。 它与传统链表的区别在于&#xff0c;静态链表使用数组保存节点&#xff0c;每个节点包括…

mac系统Idea登录codeium不跳转,报错faild download language server

问题描述 idea通过插件中心安装Codeium以后&#xff0c;登录无法正常跳转到登录页&#xff0c;等待一段时间&#xff0c;右下角图标报错**“faild download language server”** 解决方案 根据上面的报错&#xff0c;是没有成功下载“language_server_macos_x64“&#xff0…

CSAPP-程序的机器级表示

文章目录 概念扫盲思想理解经典好图安全事件 概念扫盲 1.汇编代码使用文本格式&#xff0c;相较于汇编的二进制可读性更好 2.程序内存包括&#xff1a;可执行的机器代码、操作系统需要的信息、管理过程调用和返回的运行时栈、用户分配的内存块 3.链接器为函数调用找到匹配的可…

P9889 [ICPC2018 Qingdao R] Plants vs. Zombies 题解 二分+贪心

[ICPC2018 Qingdao R] Plants vs. Zombies 传送门 题面翻译 给定 n n n 个植物和 m m m 的步数限制&#xff0c;每个植物在位置 1 … n 1\dots n 1…n 上。你初始时在位置 0 0 0&#xff0c;每次可以移动到相邻的位置上。 每次设你走完一步后到达的位置是 i i i&#…

数学建模【模糊综合评价分析】

一、模糊综合评价分析简介 提到模糊综合评价分析&#xff0c;就先得知道模糊数学。1965年美国控制论学家L.A.Zadeh发表的论文“Fuzzy sets”标志着模糊数学的诞生。 模糊数学又称Fuzzy数学&#xff0c;是研究和处理模糊性现象的一种数学理论和方法。模糊性数学发展的主流是在…

大语言模型系列-GPT-3

文章目录 前言一、GTP-3的改进二、GPT-3的表现总结 前言 《Language Models are Few-Shot Learners&#xff0c;2020》 前文提到GPT-2进一步提升了模型的zero shot能力&#xff0c;但是在一些任务中仍可能会“胡说”&#xff0c;GTP-3基于此提出了few shot&#xff0c;即预测…

7-22 试试手气(Python)

我们知道一个骰子有 6 个面&#xff0c;分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状态&#xff0c;即它们朝上一面的点数&#xff0c;让你一把抓起摇出另一套结果。假设你摇骰子的手段特别精妙&#xff0c;每次摇出的结果都满足以下两个条件&#xff1a; 1、每个骰子摇出…