当前位置: 首页 > news >正文

蓝桥杯练习题——二分

1.借教室

在这里插入图片描述

思路

1.随着订单的增加,每天可用的教室越来越少,二分查找最后一个教室没有出现负数的订单编号
2.每个订单的操作是 [s, t] 全部减去 d

#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e6 + 10;
int d[N], s[N], t[N], a[N];
long long b[N]; 
int n, m;int check(int mid){memset(b, 0, sizeof(b));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] > a[i]) return 0;}return 1;
}int main(){scanf("%d%d", &n, &m);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i <= m; i++) scanf("%d%d%d", &d[i], &s[i], &t[i]);int l = 0, r = m + 1;while(l + 1 < r){int mid = (l + r) / 2;if(check(mid)) l = mid;else r = mid;}// 此时 r 为第一个不满足的编号if(r == m + 1) printf("0");else printf("-1\n%d", r);return 0;
}

2.分巧克力

在这里插入图片描述

思路

二分巧克力边长,注意长和宽都要除以 mid,防止出现 1 * 100 除以 2 * 2的情况

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int h[N], w[N];
int n, k;int check(int mid){int sum = 0;for(int i = 1; i <= n; i++){// 注意:比如 1 * 100,mid 为 2,不可分sum += (h[i] / mid) * (w[i] / mid);}if(sum >= k) return 1;else return 0;
}int main(){scanf("%d%d", &n, &k);for(int i = 1; i <= n; i++) scanf("%d%d", &h[i], &w[i]);int l = 0, r = 1e5 + 1;while(l + 1 < r){int mid = (l + r) / 2;if(check(mid)) l = mid;else r = mid;}printf("%d", l);return 0;
}

3.管道

在这里插入图片描述

思路

1.二分最早打开的时间
2.合并已经打开的区间

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 10;
pair<int, int> q[N]; // 存储左右端点
int L[N], S[N];
int n, len;int check(int mid){int cnt = 0;for(int i = 0; i < n; i++){if(mid >= S[i]){// 延伸出去的距离int t = mid - S[i];int l = max(1, L[i] - t), r = min(1ll * len, 1ll * L[i] + t);q[cnt++] = make_pair(l, r);}}//区间合并sort(q, q + cnt);int st = -1, ed = -1;for(int i = 0; i < cnt; i++){if(ed + 1 >= q[i].first) 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 = 0; i < n; i++) scanf("%d%d", &L[i], &S[i]);int l = 0, r = 2e9 + 1;while(l + 1 < r){int mid = (1ll * l + r) / 2;if(check(mid)) r = mid;else l = mid;}printf("%d", r);return 0;
}

4.技能升级

在这里插入图片描述

思路

1.多路归并,把所有等差数列放在一个数组,从大到小排序,选前 m 个数
2.大于等于 x 的个数一定大于等于 m 个,二分 x,x 为从大到小排名为 m 的数
3.每个数列大于等于 x 的个数为 (a - x) / b + 1
4.每个数列大于等于 x 的总和为 (首项 + 末项) * 项数 / 2

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N];
int n, m;// 判断大于等于 mid 的个数,是否大于等于 m
int check(int mid){long long cnt = 0;for(int i = 0; i < n; i++){if(a[i] >= mid) cnt += (a[i] - mid) / b[i] + 1;}return cnt >= m;
}int main(){scanf("%d%d", &n, &m);for(int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]);int l = 0, r = 1e6 + 1;while(l + 1 < r){int mid = (l + r) / 2;if(check(mid)) l = mid;else r = mid;}long long sum = 0, cnt = 0;for(int i = 0; i < n; i++){if(a[i] >= l){// 计算项数int c = (a[i] - r) / b[i] + 1;// 计算末项int ed = a[i] - b[i] * (c - 1);// 等差数列求和sum += 1ll * (a[i] + ed) * c / 2;     // 计算有多少项,可能有多余cnt += c;}}// 减去多余的项printf("%lld", sum - (cnt - m) * l);return 0;
}

5.冶炼金属

在这里插入图片描述

思路

方法1:二分左右边界
方法2:推导公式,a / x >= b,a / x < (b + 1);

// 方法1
#include<iostream>
using namespace std;
const int N = 1e4 + 10;
int a[N], b[N];
int n;// 找到最大值
int check1(int mid){for(int i = 0; i < n; i++){if(a[i] / mid < b[i]) return 0;}return 1;
}// 找到最小值
int check2(int mid){for(int i = 0; i < n; i++){if(a[i] / mid > b[i]) return 0;}return 1;
}int main(){scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]);int l = 0, r = 1e9 + 1;while(l + 1 < r){int mid = (l + r) / 2;if(check1(mid)) l = mid;else r = mid;}int res1 = l;l = 0, r = 1e9 + 1;while(l + 1 < r){int mid = (l + r) / 2;if(check2(mid)) r = mid;else l = mid;}int res2 = r;printf("%d %d", res2, res1);return 0;
}// 方法2
#include<iostream>
using namespace std;
const int N = 1e4 + 10;
int a, b;
int n;int main(){scanf("%d", &n);int res1 = 1, res2 = 1e9;for(int i = 0; i < n; i++){scanf("%d%d", &a, &b);res1 = max(res1, a / (b + 1) + 1);res2 = min(res2, a / b);}printf("%d %d", res1, res2);return 0;
}

6.数的范围

在这里插入图片描述

思路

二分左右边界

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n, q;// 找最小值
int check1(int mid, int k){return a[mid] < k;
}// 找最大值
int check2(int mid, int k){return a[mid] <= k;
}int main(){scanf("%d%d", &n, &q);for(int i = 0; i < n; i++) scanf("%d", &a[i]);int k;while(q--){scanf("%d", &k);int l = -1, r = n;while(l + 1 < r){int mid = (l + r) / 2;if(check1(mid, k)) l = mid;else r = mid;}int res1 = r;l = 0, r = n;while(l + 1 < r){int mid = (l + r) / 2;if(check2(mid, k)) l = mid;else r = mid;}int res2 = l;if(a[res1] == k && a[res2] == k) printf("%d %d\n", res1, res2);else printf("-1 -1\n");}return 0;
}

7.最佳牛围栏

在这里插入图片描述

思路

1.二分平均值,每个数先减去平均值,转化成是否存在长度大于等于 f 的非零子段和
2.舍去很小的前缀和,保留大的前缀和

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
double a[N], s[N];
int n, f;int check(double mid){double res = 1e9, ans = -1e9;for(int i = f; i <= n; i++){// 可以舍去的前缀和res = min(res, s[i - f]);// 保留的前缀和ans = max(ans, s[i] - res);}return ans >= 0;
}int main(){scanf("%d%d", &n, &f);for(int i = 1; i <= n; i++){scanf("%lf", &a[i]);}double l = 0, r = 2001;while(l + 1e-5 < r){double mid = (l + r) / 2;for(int i = 1; i <= n; i++){s[i] = s[i - 1] + a[i] - mid;}if(check(mid)) l = mid;else r = mid;}// l + 1e-5 = rint ans = r * 1000;printf("%d", ans);return 0;
}

相关文章:

蓝桥杯练习题——二分

1.借教室 思路 1.随着订单的增加&#xff0c;每天可用的教室越来越少&#xff0c;二分查找最后一个教室没有出现负数的订单编号 2.每个订单的操作是 [s, t] 全部减去 d #include<iostream> #include<cstring> using namespace std; const int N 1e6 10; int d[…...

Java面试——Redis

优质博文&#xff1a;IT-BLOG-CN 一、Redis 为什么那么快 【1】完全基于内存&#xff0c;绝大部分请求是纯粹的内存操作&#xff0c;非常快速。数据存在内存中。 【2】数据结构简单&#xff0c;对数据操作也简单&#xff0c;Redis中的数据结构是专门进行设计的。 【3】采用单线…...

信号系统之复数傅立叶变换

1 实数DFT 傅里叶变换系列的所有四个成员&#xff08;DFT、DTFT、傅里叶变换和傅里叶级数&#xff09;都可以用实数或复数进行。由于DSP主要关心的是DFT&#xff0c;所以就以它为例。 可以根据以下方程定义离散傅里叶变换的实数版本&#xff1a; 一个 N 个样本时域信号 被分解…...

Unity - 相机画面为黑白效果

一、 在Hierarchy中创建一个Global Volume,并设置它为局部作用 二、 将场景出现的作用域范围缩小至相机所在位置&#xff0c;将相机包含即可。 三、添加覆盖组件Color Adjustments,并将Saturation直接拉为-100 。 此时&#xff0c;相机拍摄画面为黑白&#xff0c;场景视图中…...

哈啰Java 春招 24届

时长 1h 3. 为什么使用分布式ID&#xff0c;解决了什么问题 4. Leaf算法了解吗&#xff1f;讲一下原理和工作流程以及优缺点 5. 有没有可能导致id重复&#xff1f;该如何解决&#xff1f; 6. 项目中redis是如何运用的&#xff1f; 7. 项目中分布式锁是如何实现的&#xff1f; 8…...

《剑指 Offer》专项突破版 - 面试题 68 : 查找插入位置/ 69 : 山峰数组的顶部(C++ 实现)

目录 面试题 68 : 查找插入位置 面试题 69 : 山峰数组的顶部 面试题 68 : 查找插入位置 题目&#xff1a; 输入一个排序的整数数组 nums 和一个目标指 t&#xff0c;如果数组 nums 中包含 t&#xff0c;则返回 t 在数组中的下标&#xff1b;如果数组 nums 中不包含 t&#…...

赖迪思软件 lattice Diamond

问题1&#xff1a;工程编译好后&#xff0c;git上传&#xff0c;变更分支又切换回来&#xff0c;再次编译有时候失败&#xff0c;所以配置好的管脚变成默认的&#xff0c;生成的IP核变成名变粗&#xff08;顶部文件&#xff0c;管脚配置显示IP核输入输出信号配置&#xff09;。…...

ROS开发基础-Linux基础第四部(开发板设置本地IP)

一 、网线连接设备 使用网线连接jetson NX与机械臂&#xff0c;如下图所示&#xff1a; 二、 修改上位机IPV4 IP ①测试是否可连接。网线连接机械臂之后&#xff0c;在桌面打开终端输入命令“ping 192.168.1.18”,如不可正常通信&#xff0c;可按照下述步骤进行设置。 ②在U…...

TSINGSEE青犀AI智能分析网关V4智慧油田安全生产监管方案

一、方案背景 随着科技的不断发展&#xff0c;视频监控技术在油田行业中得到了广泛应用。为了提高油田生产的安全性和效率&#xff0c;建设一套智能视频监控平台保障安全生产显得尤为重要。本方案采用先进的视频分析技术、物联网技术、云计算技术、大数据和人工智能技术&#…...

C++基于多设计模式下的同步异步日志系统day3

C基于多设计模式下的同步&异步日志系统day3 &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&am…...

Cypher语句查询neo4j数据库教程

文章目录 Cypher介绍执行Cypher语句查询总结 Cypher介绍 NodeMatcher和RelationshipMatcher能够表达的匹配条件相对简单&#xff0c;更加复杂的查询还是需要用Cypher语句来表达。 Py2neo本身支持执行Cypher语句的执行&#xff0c;可以将复杂的查询写成Cypher语句&#xff0c;…...

【ESP32 IDF快速入门】点亮第一个LED灯与流水灯

文章目录 前言一、有哪些工作模式&#xff1f;1.1 GPIO的详细介绍1.2 GPIO的内部框图输入模式输出部分 二、GPIO操作函数2.1 GPIO 汇总2.2 GPIO操作函数gpio_config配置引脚reset 引脚函数设置引脚电平选中对应引脚设置引脚的方向 2.3 点亮第一个灯 三、流水灯总结 前言 ESP32…...

再见,Visual Basic——曾经风靡一时的编程语言

2020年3月&#xff0c;微软团队宣布了对Visual Basic&#xff08;VB&#xff09;的“终审判决”&#xff1a;不再进行开发或增加新功能。这意味着曾经风光无限的VB正式退出了历史舞台。 VB是微软推出的首款可视化编程软件&#xff0c;自1991年问世以来&#xff0c;便受到了广大…...

【C++精简版回顾】18.文件操作

1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 &#xff08;1&#xff09;函数名 文件对象.open &#xff08;2&#xff09;函数参数 /* ios::out 可读 ios::in 可…...

【解决方案】ArcGIS Engine二次开发时,运行后出现“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain...”

我们在做ArcGIS Engine二次开发时&#xff0c;特别是新手&#xff0c;安装好了开发环境&#xff0c;满怀信心的准备将按照教程搭建好的框架在Visual Studio中进行运行。点击运行后&#xff0c;却出现了“正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化…...

新项目,Linux上一键安装MySQL,Redis,Nacos,Minio

大家好&#xff0c;我是 jonssonyan 分享一个我的一个开源项目&#xff0c;这是一个在 Linux 平台上一键安装各种软件的脚本项目&#xff0c;脚本使用 Shell 语言编写&#xff0c;后续还会增加更多软件的一键安装&#xff0c;代码在 GitHub 上全部开源的&#xff0c;开源地址如…...

Rust 从 PyTorch 到 Burn

一、性能轮盘赌 机器码相同&#xff0c;但放置在不同的地址上&#xff0c;性能可能截然不同。 作为软件开发人员&#xff0c;我们经常假设特定代码的性能仅由代码本身和运行它的硬件决定。这种假设让我们在优化代码以获得更好性能时感到有控制力。虽然在大多数情况下这种假设…...

Swin-Transformer网络代码实现

还是参考导师级别博主霹雳吧啦Wz的个人空间-霹雳吧啦Wz个人主页-哔哩哔哩视频 博主写的博客Swin-Transformer网络结构详解_swin transformer-CSDN博客 视频理论讲解12.1 Swin-Transformer网络结构详解_哔哩哔哩_bilibili pytorch实现12.2 使用Pytorch搭建Swin-Transformer网…...

Java ZooKeeper-RocketMQ 面试题

Java ZooKeeper-RocketMQ 面试题 前言1、谈谈你对ZooKeeper的理解 &#xff1f;2、Zookeeper的工作原理&#xff08;Zab协议&#xff09;3、谈谈你对分布式锁的理解&#xff0c;以及分布式锁的实现&#xff1f;4、 zookeeper 是如何保证事务的顺序一致性的&#xff1f;5、 zook…...

css制作瀑布流布局

CSS制作瀑布流布局的步骤如下&#xff1a; HTML结构&#xff1a;使用无序列表ul和列表项li来创建网格布局。 <ul class"grid"><li><img src"image1.jpg"></li><li><img src"image2.jpg"></li><li…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...