二分-补题

news2025/1/25 9:04:35

文章目录

  • 造海船
    • 描述
    • 输入描述
    • 输出描述
    • 样例输入 1
    • 样例输出 1
    • 提示
    • 题解
  • 寻找第一个1
    • 题目描述
    • 输入描述
    • 输出描述
    • 测试用例
    • 题解
  • 查找数字是否出现
    • 描述
    • 输入描述
    • 输出描述
    • 样例输入 1
    • 样例输出 1
    • 题解
  • 字典找数
    • 描述
    • 输入描述
    • 输出描述
    • 样例输入 1
    • 样例输出 1
    • 题解
  • 寻找第一个偶数
    • 题目描述
    • 输入描述
    • 输出描述
    • 题解

造海船

描述

明朝郑和下西洋,需要建造庞大的海船,需要足够的木料,因为那时候没有钢铁制造的船,现在有 n 根原木,现在想把这些木头切割成 k 段长度均为 l 的小段木头(木头有可能有剩余),用来制造船的部件。

当然,工匠希望得到的小段木头越长越好,这样可以让船更大一些不浪费木料,请求出 l 的最大值。

原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。

例如有两根原木长度分别为 11 和 21,要求切割成等长的 6 段,很明显能切割出来的小段木头长度最长为 5。

现在希望你能用现代科技可以帮助他们计算出来。

输入描述

第一行是两个正整数 n,k,分别表示原木的数量,需要得到的小段的数量。
接下来 n 行,每行一个正整数 Li,表示一根原木的长度。

输出描述

仅一行,即 l 的最大值。
如果连 1cm 长的小段都切不出来,输出 0。

样例输入 1

3 7
232
124
456

样例输出 1

114

提示

数据规模与约定
对于 100% 的数据,有 1≤n≤105,1≤k≤108,1≤Li≤10^8(i∈[1,n])。

题解

#include<iostream>
using namespace std;
#define LL long long
int n,k,l,r,mid,a[100860];
LL sum=0;

bool yvn (int x){
    int ans=0;
    for(int i=0;i<n;i++){
        ans+=a[i]/x;
    }
    return ans>=k;
}
int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++) cin>>a[i],sum+=a[i];
    if(sum<k) cout<<"0"<<endl;
    else if (sum==k) cout<<"1"<<endl;
    else {
        l=0;
        r=sum/k;
        while(l<r){
            mid=(l+r+1)>>1;
            if(yvn(mid)) l=mid;
            else r=mid-1;
        }cout<<l<<endl;
    }
    return 0;
} 

寻找第一个1

题目描述

给定一个01序列,序列从左至右一开始是若干个0,接下来直到末尾是若干个1。求第一个1的下标;如果序列中没有1,那么输出-1。

注:使用二分法实现。

输入描述

在这里插入图片描述

输出描述

输出第一个1的下标;如果没有1,那么输出-1。

测试用例

样例1

输入

5
0 0 0 1 1

输出

3

解释

从左到右第一个1的下标是3

样例2

输入

5
0 0 0 0 0

输出

-1

解释

序列中没有1,因此输出-1

题解

只需要在二分模板的基础上稍加修改,当找到1的时候不让他结束,继续往左找,因为要找第一个1,不确定左边还有没有1,这里还需要定义一个标志位flag,如果找到1那么变为true,最后while循环结束只要看一下是不是true,不是的话说明没找到,输出-1就ok了。

#include<bits/stdc++.h>
using namespace std;
bool flag = false;
const int N = 1e6;
int A[N];

int BinarySearch(int *a,int len){
	int low = 0,high = len-1,mid;
	while(low<=high){
		mid = (low+high)/2;
		if(a[mid] == 1){
			high = mid-1;
			flag = true;
		}else{
			low = mid+1;
		}
	}
	return flag == true?high+1:-1;
}

int main(){
	int n;
	cin >> n;
	for(int i=0;i<n;i++){
		cin >> A[i];
	}
	cout << BinarySearch(A,n);
}

查找数字是否出现

描述

在一个升序序列中,查找给定值是否存在,如果存在输出YES,否则输出NO。

输入描述

第一行一个整数n,表示升序序列的长度(1<n≤107) 。
第二行包含n个整数,升序序列各元素。所有元素取值区间(0~1010)。
第三行一个整数m,表示要查询数值的个数(1<m<105)。
接下来m行,每行一个整数,表示要查找数字。查找数字取值( 0~1010 )。

输出描述

m行,每行YES或NO,如果存在输出YES,否则输出NO。保持输入顺序。

样例输入 1

5
1 1 3 6 1024
2
1000
6

样例输出 1

NO
YES

题解

#include <bits/stdc++.h>
using namespace std;
const int N = 1e8;
int A[N];

int main() {
    int key,n,m,mid;
    cin >> n;
    for(int i = 0;i < n;i ++){
        cin >> A[i];
    }
    cin >> m;
    while(m--){
        cin >> key;
        int low = 0,high = n-1,flag;
        while(low <= high){
            mid = (low+high)/2,flag = 0;
            if(A[mid] == key) {
                cout << "YES" << endl;
                flag = 1;
                break;
            }else if(A[mid] > key) high =mid - 1;
            else low = mid+1;
        }
        if(!flag) cout << "NO" << endl;
    }
    return 0;
}

字典找数

描述

现有一字典,查找字典15到45页中,某一页的页码,用二分法快速翻至所需要页码,需要翻多少次?(中间值 mid = (最大值+最小值)/2)

输入描述

字典中某一页的页码n。(15≤n≤45)

输出描述

一个整数,表示查找的次数。

样例输入 1

18

样例输出 1

3

题解

#include<bits/stdc++.h>
using namespace std;
int main() {
	int low = 15,high = 45,mid,n,count = 0;
    cin >> n;
    while(low<=high){
        mid = (low+high)/2;
        if(mid == n) {
            count++;
            break;
        }else if(mid < n){
            low = mid + 1;
            count++;
        }else{
            high = mid - 1;
            count++;
        }
    }
    cout << count;
	return 0;
}

寻找第一个偶数

题目描述

给定一个正整数序列,序列从从只有一开始是若干个奇数,接下来直到末尾是若干个偶数。求第一个偶数的下标;如果序列中没有偶数,那么输出-1。

注:使用二分法实现。

输入描述

在这里插入图片描述

输出描述

输出第一个偶数的下标;如果没有偶数,那么输出-1。

样例1

输入

5
3 5 1 8 6

输出

3

解释

从左到右第一个偶数是8,下标是3

样例2

输入

5
3 5 1 7 3

输出

-1

解释

序列中没有偶数,因此输出-1

题解

#include<bits/stdc++.h>
using namespace std;
bool flag = false;
const int N = 1e6;
int A[N];

int BinarySearch(int *a,int len){
	int low = 0,high = len-1,mid;
	while(low<=high){
		mid = (low+high)/2;
		if(a[mid] % 2 == 0){
			high = mid-1;
			flag = true;
		}else{
			low = mid+1;
		}
	}
	return flag == true?high+1:-1;
}

int main(){
	int n;
	cin >> n;
	for(int i=0;i<n;i++){
		cin >> A[i];
	}
	cout << BinarySearch(A,n);
}

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

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

相关文章

【AI的未来 - AI Agent系列】【MetaGPT】2. 实现自己的第一个Agent

在MetaGPT中定义的一个agent运行示例如下&#xff1a; 一个agent在启动后他会观察自己能获取到的信息&#xff0c;加入自己的记忆中下一步进行思考&#xff0c;决定下一步的行动&#xff0c;也就是从Action1&#xff0c;Action2&#xff0c;Action3中选择执行的Action决定行动…

怎么把workspace的数据导入到simulink进行FFT分析?

怎么把数据导入到simulink在这篇博客已经阐述了&#xff0c;那么如何把数据导入到simulink还能进行FFT分析呢&#xff1f; 首先我们看simulink的FFT分析界面&#xff0c;&#xff08;前置步骤&#xff1a;导入powergui模块&#xff0c;双击powergui模块&#xff0c;Tool选项卡…

第8章-第6节-Java中字符流的缓冲流

1、在说正题之前&#xff0c;先说一个小细节&#xff0c;不管是字节流还是字符流都要注意这个细节&#xff0c;具体看这篇博文&#xff1a;关于Java的IO流里面的方法read()的小细节 2、字符流的缓冲流&#xff1a; 1&#xff09;、BufferedWriter 方法名说明void newLine()写…

代码随想录刷题题Day32

刷题的第三十二天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day32 任务 ● 70. 爬楼梯 &#xff08;进阶&#xff09; ● 322. 零钱兑换 ● 279.完全平方数 1 爬楼梯&#xff08;进阶&#…

JavaScript的变量详解

一、变量的声明和赋值 编程中的程序其本质就是处理数据的过程&#xff0c;当输入指令时&#xff0c;就可以输出相应的内容&#xff0c;在输入和输出之间就是处理数据的过程。处理的数据可能有多种&#xff0c;多个&#xff0c;这时就需要使用不同的名字来存储、区分和提取不同的…

Neo4j知识图谱(2)创建与删除

Neo4j - CQL简介_w3cschoolhttps://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html一、创建节点 create(n:Person{name:何仙鸟,age:21}) create就是创建&#xff0c;无论是点还是边都是用create来创建 n相当于一个别名&#xff0c;比如创建一个Person&#xff0c;而Pe…

【数据库】MySQL性能分析和优化

导语 当数据量非常庞大时,使用MySQL进行select操作可能会出现耗时特别多的情况。例如:在一张百万数据的表格good中执行select * from good;查询耗时可能需要十几秒,让客户等待十几秒,是不被接受的, 此时我们就需要对相关语句进行性能分析并优化。下面就一起看一下MySQL的…

八. 实战:CUDA-BEVFusion部署分析-学习spconv的优化方案(Explicit GEMM conv)

目录 前言0. 简述1. 什么是Explicit GEMM Conv2. im2col3. spconv是如何使用Explicit GEMM Conv的4. 使用Explicit GEMM Conv处理spconv的优缺点5. 拓展-conv加速5.1 Introduction5.2 im2col5.3 Forward graph5.4 Backward graph5.5 Python example for forward propagation5.6…

研0或研一|如何快速入门深度学习?

一、经验建议 1️⃣课程篇 直接上手B站【小土堆PyTorch深度学习快速入门教程】&#xff0c;共计9h50min左右&#xff0c;预计一周就可以学完&#xff0c;比较偏向理论和实践相结合跟李沐学AI B站【动手学深度学习 PyTorch版】刘二大人B站【PyTorch深度学习实践】&#xff0c;…

Python武器库开发-武器库篇之Whois信息收集模块化(四十五)

Python武器库开发-武器库篇之Whois信息收集模块化(四十五) 我们在进行渗透的时候&#xff0c;需要进行全面的信息收集&#xff0c;除了主动信息收集之外&#xff0c;我们还经常会进行被动信息收集&#xff0c;Whois信息收集就是其中的一种,我们可以利用一些网站进行Whois信息收…

uniCloud 云数据库(1)

目录 1&#xff1a;云数据库入门,基本概念了解 1.1 云数据库是关系型还是Nosql? 1.2 uniCloud 云数据库和关系型数据库的对比 1.3 官方文档传送门 2: 基本操作表 创建 在uniCloud web控制台 进行创建 数据表的3个组成部分 通过传统方式操作数据库 获取集合的引用 集…

完成源示例

本主题演示如何创作和使用自己的完成源类&#xff0c;类似于 .NET 的 TaskCompletionSource。 completion_source 示例的源代码 下面的列表中的代码作为示例提供。 其目的是说明如何编写自己的版本。 例如&#xff0c;支持取消和错误传播不在此示例的范围内。 #include <w…

【Nacos】Nacos 双端版本升级实战手册

背景 由于原来使用的 Nacos 版本&#xff08;1.1.4&#xff09;存在安全漏洞&#xff0c;需要进行升级修复。经过查询后&#xff0c;决定将版本升级到2.2.4。 Nacos 服务共有三个&#xff1a; 192.168.2.190:8848192.168.2.191:8848192.168.2.192:8848 步骤 服务端升级&am…

宝塔安装redis并且远程连接redis教程

第一步&#xff1a;搜索redis并安装 第二步&#xff1a;在防火墙添加端口6379 第三步&#xff1a;查看宝塔防火墙是否开启了6379端口 firewall-cmd --zonepublic --list-ports 很显然并没有开启 第四步&#xff1a;开启防火墙的6379端口 firewall-cmd --zonepublic --add-po…

SLAM第十四讲

基础知识 四元数 先将三维空间的点p(x,y,z) 变成四元数的表示q(0,x,y,z) 其中0为四元数的实部&#xff0c;x,y,z为四元数的虚部。 实部为0的四元数也叫纯虚四元数。 通过 左乘四元数&#xff…

Vue3项目引入canvaskit-wasm库(skia库的wasm版)

1 安装canvaskit-wasm npm install canvaskit-wasm 或者 yarn add canvaskit-wasm 2 将文件node_modules/canvaskit-wasm/bin/canvaskit.wasm复制到public目录 3 引入到组件中 <template><img :src"imgData"/> </template><script setup>…

Redis命令 - Sets命令组常用命令

Set集合&#xff0c;无序&#xff0c;一堆不重复值的组合。利用redis提供的set数据结构&#xff0c;可以存储一些集合性的数据。 使用场景&#xff1a;例如&#xff0c;实现如共同关注、共同喜好、二度好友等 1、SADD key member [member …] 向集合中添加一个或者多个成员 …

顺序表实现(下)(C语言)

几道相关例题,帮助大家更好理解顺序表. 文章目录 前言 一、顺序表二、创建顺序表并初始化三.删除非递减顺序表L中的重复元素四.在非递减顺序表中删除[s,t]之间的元素五.设计算法逆置顺序表L,并将序列L循环左移六.顺序表A和B的元素个数分别为m,n.A表升序排序,B表降序排序,两表中…

四、Qt 的第一个demo

在上一篇章节里《三、Qt Creator 使用》&#xff0c;我们介绍了如何使用Qt Creator创建一个简单的带窗体的demo&#xff0c;在这一章节里&#xff0c;我们详细讲解一下这个demo的文件组成&#xff0c;及主函数&#xff0c;并在UI上加一些控件&#xff0c;实现一些简单的功能。 …

SDRAM小项目——写模块

写模块跟着视频看了一个多星期&#xff0c;一开始始终有点弄不清楚&#xff0c;现在记录一下理解的过程。 阅读文档信息&#xff1a; 首先阅读文档信息&#xff0c;了解SDRAM写过程的状态转换和时序图 SDRAM整体状态流程如图所示&#xff1a; 在SDRAM整体系统中&#xff0c…