【蓝桥杯集训3】二分专题(3 / 5)

news2025/7/20 22:20:21

目录

二分模板

1460. 我在哪? - 二分答案 + 哈希表

1221. 四平方和 - 哈希表 / 二分

1、哈希表

2、二分 + 自定义排序

1227. 分巧克力 - 

113. 特殊排序 -  


二分模板

  • l + r >> 1 —— 先 r = mid 后 l = mid+1 —— 寻找左边界 —— 找大于某个数的最小值
  • l+r+1>>1 —— 先 l = mid 后 r = mid-1 —— 寻找右边界 —— 找小于某个数的最大值

活动 - AcWing 

import java.util.*;

class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt(),t=sc.nextInt();
        int[] a=new int[n];
        for(int i=0;i<n;i++) a[i]=sc.nextInt();
        while(t-->0)
        {
            int x=sc.nextInt();
            
            int l=0,r=n-1;
            while(l<r)
            {
                int mid=l+r>>1;
                if(a[mid]>=x) r=mid;
                else l=mid+1;
            }
            if(a[r]!=x) 
            {
                System.out.println(-1+" "+-1);
                continue;
            }
            System.out.print(r+" ");
            
            l=0;
            r=n-1;
            while(l<r)
            {
                int mid=l+r+1>>1;
                if(a[mid]<=x) l=mid;
                else r=mid-1;
            }
            System.out.println(r);
        }
    }
}

1460. 我在哪? - 二分答案 + 哈希表

1460. 我在哪? - AcWing题库

题目:

约翰想要知道最小的 K 的值,使得他查看任意连续 K 个邮箱序列,他都可以唯一确定这一序列在道路上的位置.
最小的K值,意思是要找到最小长度为K的子串并且只出现过一次

思路:

二分答案K值

用哈希表存前面出现过的子串,如果后面长度为k的子串在哈希表存在过,说明后面的子串在前面出现过,说明该k值小,答案应该增大

最后二分出满足要求的最小k值

import java.util.*;

class Main
{
    static String s="";
    public static boolean ck(int len,String s)
    {
        int n=s.length();
        Set<String> st=new HashSet<>();
        for(int i=0;i+len-1<n;i++)
        {
            String t=s.substring(i,i+len);
            if(st.contains(t)) return false; //如果后面存在前面出现过的
            st.add(t);
        }
        return true;
    }
    
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        
        String s=sc.next();
        int l=1,r=n;
        while(l<r)
        {
            int mid=l+r>>1;
            if(ck(mid,s)) r=mid;
            else l=mid+1;
        }
        System.out.print(l);
    }
}

 

1221. 四平方和 - 哈希表 / 二分

活动 - AcWing

题目:

思路:

a,b,c,d的枚举范围为\sqrt{n},四重循环会tle

所以我们只能枚举两个数
因此我们需要用空间换时间
先将 c^{2}+d^{2} 存起来降低时间复杂度

1、哈希表

因为要按0≤a≤b≤c≤d顺序,存第一个表示法

所以对于cd组合,d从c开始枚举,将 sum=c^{2}+d^{2} 对应的c和d存起来

因为cd是从小到大枚举的,所以如果后面再次出现相同的sum值,就跳过,只存第一次的

对于ab组合,b从a开始枚举,a^{2}+b^{2}确定后,一定存在对应的sum=c^{2}+d^{2}

因为ab是从小到大枚举的,所以当出现对应的sum值时,直接输出,return

import java.util.*;

class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        Map<Integer,int[]> mp=new HashMap<>();
        
        for(int c=0;c*c<=n;c++)
            for(int d=c;d*d+c*c<=n;d++)
            {
                int t=d*d+c*c;
                if(!mp.containsKey(t)) mp.put(t,new int[] {c,d});
            }
            
        for(int a=0;a*a<=n;a++)
            for(int b=a;b*b+a*a<=n;b++)
            {
                int x=n-a*a-b*b;
                int[] tp=mp.get(x);
                if(mp.containsKey(x))
                {
                    System.out.print(a+" "+b+" "+tp[0]+" "+tp[1]);
                    return;
                }
            }
    }
}

2、二分 + 自定义排序

对cd组合结果进行排序

在枚举ab组合时,二分满足条件的cd组合

import java.util.*;

class Main
{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        List<int[]> list=new ArrayList<>();
        
        for(int c=0;c*c<=n;c++)
            for(int d=c;d*d+c*c<=n;d++)
            {
                int t=d*d+c*c;
                list.add(new int[]{t,c,d});
            }
        list.sort(new Comparator<int[]>(){
            public int compare(int[] o1,int[] o2)
            {
                if(o1[0]!=o2[0]) return o1[0]-o2[0]; //从大到小
                if(o1[1]!=o2[1]) return o1[1]-o2[1];
                return o1[2]-o2[2];
            }
        });    
            
        for(int a=0;a*a<=n;a++)
            for(int b=a;b*b+a*a<=n;b++)
            {
                int x=n-a*a-b*b;
                
                int l=0,r=list.size()-1;
                while(l<r)
                {
                    int mid=l+r>>1;
                    if(list.get(mid)[0]>=x) r=mid;
                    else l=mid+1;
                }
                
                if(list.get(l)[0]==x)
                {
                    int c=list.get(l)[1];
                    int d=list.get(l)[2];
                    System.out.print(a+" "+b+" "+c+" "+d);
                    return;
                }
            }
    }
}

1227. 分巧克力 - 

活动 - AcWing

题目:

思路:

 

113. 特殊排序 -  

活动 - AcWing

题目:

思路:

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

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

相关文章

SRV6跨域优势

背景 运营商网络作为一张覆盖全国的网络&#xff0c;其主体分为骨干&#xff0c;省干&#xff0c;城域网层级&#xff0c;主流的管理模式为分层级管理。随着运营商网络服务的终端规模不断增长&#xff0c;不同地理位置之间网络连接的需求变得非常的普遍&#xff0c;但不同网络…

SpringMVC使用JSTL

简介 JSTL 标签是一个开放源代码的 JSP 标签库&#xff0c;是由 apache 的 jakarta 小组来维护的&#xff1b;JSTL 只能运行在支持 JSP1.2 和Servlet2.3 规范的容器上&#xff0c;在 jsp 页面中经常用到&#xff0c;能帮助我们实现一些特殊的功能&#xff0c;例如&#xff1a;…

windows-Mysql的主从数据库同步设置

复制原有的mysql修改my.ini配置文件 修改端口号修改从数据的地址和从数据库的数据存放地址安装从数据库进入从数据库的bin目录&#xff0c;打开命令窗口输入命令&#xff1a;mysqld.exe install mysql-back --defaults-file "C:\ProgramData\MySQL\MySQL Server 5.7-back\…

1、创建第一个Android项目

1.1、创建Android工程项目&#xff1a;双击打开Android Studio。在菜单栏File中new-->new project3、在界面中选择Empty Activity&#xff0c;然后选择next4、在下面界面中修改工程名称&#xff0c;工程保存路径选择java语言&#xff0c;然后点击finishAndroid studio自动为…

实现了统一消息中心的微服务基础框架 JVS,快点赞收藏

一、开源项目简介基于JVS&#xff08;基于spring cloud封装&#xff09;的基础开源框架&#xff0c;实现了基于多对多租户能力的管理系统。二、基础框架实现功能支持数据管理支持分布式定时任务支持分布式日志采集支持系统监控支持动态配置中心支持模板消息支持链路跟踪支持邮件…

jenkins部署指定任意版本和配置详细教程 jenkins 2.361版本示例

Jenkins构建CI/CD什么是CI/CD&#xff1a;持续集成/持续发布---开发(git) -->git主库-->jenkins(gitjdktomcatmaven打包测试&#xff09;-->发布到tomcat服务器。持续集成(Continuous Integration, CI): 代码合并&#xff0c;构建&#xff0c;部署&#xff0c;测试都在…

【Airplay_BCT】Bonjour 和本地链接、域名和 DNS

Bonjour 零配置网络架构支持在局域网或广域网上发布和发现基于 TCP/IP 的服务。本文档概括介绍了 Bonjour 架构&#xff0c;并简要介绍了可用的 Bonjour API。 Bonjour 是 Apple 对一套零配置网络协议的实现。 Bonjour 旨在让用户更轻松地进行网络配置。 例如&#xff0c;Bon…

ChatGPT一路狂飙,NVMe SSD能否应对性能挑战?

近日&#xff0c;ChatGPT持续火爆&#xff0c;用户在短短两个月内迅速破亿&#xff0c;大量用户涌入导致ChatGPT访问和数据规模指数级增加。与数月前发布的版本相比&#xff0c;新的ChatGPT“智能”了许多&#xff0c;不仅可以像人类一样聊天交流&#xff0c;甚至能够完成一定程…

70. with open( ) as 以自动关闭文件的方式打开文件

70. with open( ) as 以自动关闭文件的方式打开文件 文章目录70. with open( ) as 以自动关闭文件的方式打开文件1. 知识回顾1. open函数语法参考2. 准备工作3. mode模式知识回顾2. with open 语句的作用3. with open 语句语法4. with open 语句实操5. 总结1. 代码总结2. 重点知…

Pandas学习2

Pandas学习2 None 两种缺失数据&#xff1a;None、np.nan(NaN) None是python自带的&#xff0c;不能参与计算。类型是object np.nan 浮点类型&#xff0c;说明能参与计算&#xff0c;但是结果是nan pandas中的None和np.nan pandas中的None和np.nan都视为np.nan 如果列…

ArkUI新能力,助力应用开发更便捷

ArkUI是一套构建分布式应用的声明式UI开发框架。它具备简洁自然的UI信息语法、丰富的UI组件、多维的状态管理&#xff0c;以及实时界面预览等相关能力&#xff0c;帮助您提升应用开发效率&#xff0c;并能在多种设备上实现生动而流畅的用户体验。随着HarmonyOS 3.1版本的发布&a…

签收后再补录物流信息单号要如何分析

随着网络时代电商平台掘起&#xff0c;购物平台也是越来越多&#xff0c;呈现出快递也是越来越多&#xff0c;电商平台和快递两者是密不可分&#xff0c;有下单就需要快递物流&#xff0c;所以快递公司也是很重要一个环节&#xff0c;最近有朋友向咨询如何分析出比如单号过已签…

Springboot扩展点之SmartInitializingSingleton

前言这篇文章会重点分析一下SmartInitializingSingleton扩展点的功能 特性、实现方式 、工作原理。SmartInitializingSingleton扩展点内只有一个扩展方法&#xff0c;且执行时机在Spring Bean的生命周期里比较靠后&#xff0c;很重要&#xff0c;但是也很简单。功能特性1、Smar…

0基础入行Java开发—详解Java泛型之详解通配符

今天我们来继续讲解泛型中另一个非常重要的概念&#xff0c;就是那个“小问号”——通配符! 通配符概念 泛型中除了用 表示泛型外&#xff0c;还有 <?>这种形式。&#xff1f; 被称为通配符。那么引入通配符的原因又是什么呢&#xff1f;看下面这段代码&#xff1a; …

格兰杰因果检验_Python实现

原理部分 代码实现 步骤 #mermaid-svg-kEtkcqkpRzxjdoOv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kEtkcqkpRzxjdoOv .error-icon{fill:#552222;}#mermaid-svg-kEtkcqkpRzxjdoOv .error-text{fill:#552222;s…

前端框架LayUI

Bootstrap框架 Bootstrap让前端开发更快速、简单。所有开发者都能快速上手、所有设备都可以适配、所有项目都适 用。 可以直接使用Bootstrap提供的 CSS 样式表&#xff0c;Bootstrap的源码是采用最流行的CSS预处理工具Less和Sass开发的。可以直接采用预编译的CSS文件快速开发…

2023面试题

目录 http部分 2、tcp 三次握手&#xff0c;一句话概括 3、tcp四次挥手 4、什么是跨域&#xff0c;跨越的解决办法 5、TCP 和 UDP 的区别 6、websocket 7、HTTP 请求的方式&#xff0c;HEAD 方式 8、几个很实用的 BOM 属性对象方法&#xff08;什么是 Bom? Bom 是浏览器对象&a…

重生之我是赏金猎人(三)-SRC漏洞挖掘-强行多次FUZZ发现某厂商SSRF到redis密码喷洒批量反弹Shell

0x00 前言 https://github.com/J0o1ey/BountyHunterInChina 欢迎大佬们点个star 最近BugBounty挖了不少&#xff0c;但大多数都是有手就行的漏洞&#xff0c;需要动脑子的实属罕见 而今天就遇到了一个非常好的案例&#xff0c;故作此文 0x01 对目录批量FUZZ&#xff0c;发…

数字孪生智慧机场:透视数字化时代下的航空运营

在《智慧民航建设路线图》文件中&#xff0c;民航局明确指出&#xff0c;智慧机场是实现智慧民航的四个核心抓手之一。这一战略性举措旨在推进数字化技术与航空产业的深度融合&#xff0c;为旅客提供更加智能化、便捷化、安全化的出行服务&#xff0c;进一步提升我国民航发展的…

示波器详解

&#x1f44d;&#x1f44d;&#x1f44d;本文是介绍和总结了示波器的一些内容&#xff0c;有助于大学生学习以及复习&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&…