二分-补题

文章目录

  • 造海船
    • 描述
    • 输入描述
    • 输出描述
    • 样例输入 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.mzph.cn/news/622010.shtml

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

相关文章

关于 setData 同步异步的问题

小程序官方文档中的回答解释: 所以大概意思就是: 1.setData在逻辑层的操作是同步&#xff0c;因此this.data中的相关数据会立即更新,比如下面的例子: const a 1 this.setData({b: a ? a : , }) console.log(that.data.b) // 1 2. setData在视图层的操作是异步&#xff0c;…

自定义白平衡调节的步骤 白平衡怎么设置好 白平衡和色温的关系 用什么软件调节白平衡

不管是拍摄视频/图片&#xff0c;还是视频/图片后期处理&#xff0c;白平衡调节都是很重要的环节&#xff0c;比如在氛围感很好咖啡厅内拍一张照&#xff0c;但是拍出来的人物脸色蜡黄&#xff0c;就是因为白平衡没设置好&#xff0c;下面就说说自定义白平衡调节的步骤&#xf…

java: 5-6 break

文章目录 1. break1.1 介绍1.2 语法和流程图1.3 入门练习1.4 细节说明1.5 练习 【老韩视频p137-】 1. break 看个需求&#xff1a;随机生成 1-100 的一个数&#xff0c;直到生成了 97 这个数&#xff0c;看看你一共用了几次? 【思路分析:循环&#xff0c;但是循环的次数不知道…

大厂咋做支付系统的核对?

核对是保障资金安全的重要机制。 时效角度&#xff0c;主要有&#xff1a; &#xff08;准&#xff09;实时核对 准确性不如离线核对&#xff0c;且需相应实时核对平台建设 离线核对&#xff08;如 T1 核对&#xff09; 主要问题是发现问题的时机较为后置&#xff0c;部分场景…

Java基础之并发篇(二)

1、前言 本篇主要基于Java基础之并发篇&#xff08;一&#xff09;继续梳理java中关于并发相关的基础只是。本篇基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、synchronized 的原理是什么? synchronized是 Java 内置的关键字&#xff0c;它提供了一种独占的…

【复现】大华 DSS 数字监控系统 SQL 注入漏洞_18

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 大华DSS是大华的大型监控管理应用平台&#xff0c;支持几乎所有涉及监控等方面的操作&#xff0c;支持多级跨平台联网等操作。 可…

Echarts图表如何利用formatter自定义tooltip的内容和样式

在展示多数据图表的时候 有的时候需要图例也展示出一些内容来&#xff0c;例如官方这样子&#xff1a;鼠标悬停的时候展示该点数据 但是&#xff0c;官方提供的样式有时不适用所有的开发场景 我的项目需要实现鼠标悬停在某一点的时候&#xff0c;只展示该条线的数据&#xff0…

【XILINX】使用SMPTE UHD-SDI IP时怎么约束core?

SMPTE UHD-SDI IP 通过使用以下步骤指定与IP核心相关联的各种参数的值&#xff0c;可以自定义IP以在设计中使用&#xff1a; 1.从IP目录中选择IP。 2.双击所选IP&#xff0c;或从工具栏或右键单击菜单中选择“自定义IP”命令。 所需约束 rx_clk和tx_clk的周期必须根据要支…

Java21 + SpringBoot3集成WebSocket

文章目录 前言相关技术简介什么是WebSocketWebSocket的原理WebSocket与HTTP协议的关系WebSocket优点WebSocket应用场景 实现方式1. 添加maven依赖2. 添加WebSocket配置类&#xff0c;定义ServerEndpointExporter Bean3. 定义WebSocket Endpoint4. 前端创建WebSocket对象 总结 前…

【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…

[Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用

前面讲解了使用Helm部署mysql集群,这里来看看使用Ingress搭建负载均衡功能 1.介绍 功能类似 Nginx ,可以根据域名、路径把请求转发到不同的 Service , Ingress 为外部访问集群提供了一个 统一 入口, 避免 了 对外暴露集群端口 ,可以配置 https,http访问集群应用,接下来看看如…

2024年《一个项目征服Java中高级体系》博客计划

终于下决心来写一套大型的Java 笔记&#xff0c;不为别的&#xff0c;就是为了强迫自己将整个Java体系梳理清楚&#xff0c;让自己成为内功扎实的Java高级架构师。牛已经吹出来了&#xff0c;不做对不起网友&#xff01; 经过一个多月的持续规划&#xff0c;现在终于定好了整体…

8年老鸟,自动化测试经验,测试数据管理分析总结,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 问题&#xff1a;…

Linux学习记录——사십삼 高级IO(4)--- Epoll型服务器

文章目录 1、理解Epoll和对应接口2、实现 1、理解Epoll和对应接口 poll依然需要OS去遍历所有fd。一个进程去多个特定的文件中等待&#xff0c;只要有一个就绪&#xff0c;就使用select/poll系统调用&#xff0c;让操作系统把所有文件遍历一遍&#xff0c;哪些就绪就加上哪些fd…

ssm基于VUE.js的在线教育系统论文

摘 要 随着学习压力越来越大&#xff0c;课外参加补习班的学生越来越多。现在大多数学生采用请家教、自学、报名补习班的方式进行课外的额外学习。请家教费用昂贵&#xff0c;自学效率低&#xff0c;碰到自己不会的知识不能及时得到解达&#xff0c;报名补习班需要时间、地点的…

x-cmd pkg | trash-cli - 类 Unix 系统的命令行垃圾桶

目录 简介首次用户技术特点竞品和相关作品进一步阅读 简介 trash-cli 是类 Unix 系统的命令行垃圾桶&#xff0c;用于移动文件到回收站&#xff0c;同时会记录文件的原地址和删除日期。 该工具使用与 GNOME、KDE ​​和 XFCE 等桌面环境相同的垃圾桶&#xff0c;所以即使是非 …

PVE虚拟机配置文件恢复

一、pve 创建的虚拟机的配置文件位置 在宿主机的 /etc/pve/qemu-server&#xff0c;这里有创建虚拟机的相关硬件信息。 rootpve1:/etc/pve/qemu-server# pwd /etc/pve/qemu-server二、故障现象 在命令行执行qm list不显示虚拟机&#xff0c;查看 宿主机的 /etc/pve/qemu-ser…

Codeforces Round 913 (Div. 3)E 不进位各数位和与打表

Problem - E - Codeforces digsum(a)digsum(b)digsum(c)digsum(n) 要点一&#xff1a; 当左边和发生进位&#xff0c;比如56 11&#xff0c;那么数位和会变小。其实下一位就是相加后对9取余&#xff0c;各数位和必定变小的。 要点二&#xff1a; 然后就是组合情况了&#x…

Echarts可视化-数据请求-代码实现和思路

需求&#xff1a;为前端可视化图表提供数据支持。 实现&#xff1a; 时间戳获取优化&#xff08;细化到秒&#xff09; 根据时间获取数据&#xff08;SQL编写&#xff09; 前端需求数据返回&#xff08;数据VO&#xff09; 内容 Apache ECharts 营业额统计 用户统计 订单…

搜维尔科技:【简报】元宇宙数字人赛道,《全息影像技术应用》!

期待着看展的主角来到今天要参观的全息影像展&#xff0c;平时就喜欢看展的她对于所谓的全息影像非常好奇&#xff0c;于是她带着期待的心情进入展内。进入展内的主角看到的是与之前完全不同的画展&#xff0c;每幅画看起来就像真的一样&#xff0c;充满好奇的她在展览的各处游…