【蓝桥杯集训10】Tire树 字典树 最大异或对专题(3 / 3)
目录
字典树模板
1、插入操作
2、查询操作
143. 最大异或对 - trie + 二进制
3485. 最大异或和 - 前缀和+Trie+滑动窗口
字典树模板
活动 - AcWing
字典树:高效存储和查找字符串集合的数据结构
- son[节点1地址][值]=节点2地址 —— 节点1的子节点为节点2
- cnt[节点地址] —— 记录以该节点地址为结尾的字符串个数
1、插入操作
static void insert(String s) {int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) son[p][u]=++idx; //如果节点不存在 创建节点p=son[p][u]; //走到p的子节点}cnt[p]++; //把这一串字符插入后 记录以最后此节点为标记的字符串数 }
2、查询操作
static int query(String s) {int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) return 0; //有一个节点不存在,说明没有这个字符串p=son[p][u];}return cnt[p]; }
/**道阻且长,行则将至*author:Roye_ack
*/
import java.util.*;
import java.io.*;
import java.math.*;class Main
{static int N=100010;static int[] cnt=new int[N];static int[][] son=new int[N][26]; //son[节点1][值]=节点2 节点1的子节点是节点2static int idx=0;static void insert(String s){int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) son[p][u]=++idx; //如果节点不存在 创建节点p=son[p][u]; //走到p的子节点}cnt[p]++; //把这一串字符插入后 记录以最后此节点为标记的字符串数}static int query(String s){int p=0;for(char x:s.toCharArray()){int u=x-'a';if(son[p][u]==0) return 0; //有一个节点不存在,说明没有这个字符串p=son[p][u];}return cnt[p];}public static void main(String[] args) throws IOException{PrintWriter wt=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));int n=rd.nextInt();while(n-->0){String[] s=rd.nextLine().split(" ");if(s[0].equals("I")) insert(s[1]);else wt.println(query(s[1]));}wt.flush();}static class rd{static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));static StringTokenizer tk=new StringTokenizer("");static String nextLine() throws IOException{return bf.readLine();}static String next() throws IOException{while(!tk.hasMoreTokens()) tk=new StringTokenizer(bf.readLine());return tk.nextToken();}static int nextInt() throws IOException{return Integer.parseInt(next());}static double nextDouble() throws IOException{return Double.parseDouble(next());}static long nextLong() throws IOException{return Long.parseLong(next());}static BigInteger nextBig() throws IOException{BigInteger d=new BigInteger(rd.nextLine());return d;}}
}
143. 最大异或对 - trie + 二进制
活动 - AcWing
题目:
在给定的N个整数 A1,A2.......AN中选出两个进行xor(异或)运算,得到的结果最大是多少?
思路:
将每个数以二进制方式存入 Trie 树
每一次检索,我们都走与当前 ai 这一位相反的位置走,也就是让异或值最大
如果没有相反位置的路可以走的话,那么就走相同位置的路
/**道阻且长,行则将至*author:Roye_ack
*/
import java.util.*;
import java.io.*;
import java.math.*;class Main
{static int N=100010,M=31*N;static int[] a=new int[N];static int[][] son=new int[M][2]; //son[节点1][值]=节点2 节点1的子节点是节点2static int idx=0;static void insert(int x){int p=0;for(int i=30;i>=0;i--) //最大31位,0~30位{int u=x>>i&1;if(son[p][u]==0) son[p][u]=++idx;p=son[p][u];}}static int find(int x){int p=0,res=0;for(int i=30;i>=0;i--){int u=x>>i&1;if(son[p][u^1]!=0) //如果当前层有对应不同的数,走不同的分支{p=son[p][u^1];res=res*2+1; //该位异或后为1,将其左移i位加到res中}else {p=son[p][u];res=res*2+0;}}return res;}public static void main(String[] args) throws IOException{PrintWriter wt=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));int n=rd.nextInt();for(int i=0;i<n;i++){a[i]=rd.nextInt();insert(a[i]);}int res=0;for(int i=0;i<n;i++) res=Math.max(res,find(a[i]));wt.print(res);wt.flush();}static class rd{static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));static StringTokenizer tk=new StringTokenizer("");static String nextLine() throws IOException{return bf.readLine();}static String next() throws IOException{while(!tk.hasMoreTokens()) tk=new StringTokenizer(bf.readLine());return tk.nextToken();}static int nextInt() throws IOException{return Integer.parseInt(next());}static double nextDouble() throws IOException{return Double.parseDouble(next());}static long nextLong() throws IOException{return Long.parseLong(next());}static BigInteger nextBig() throws IOException{BigInteger d=new BigInteger(rd.nextLine());return d;}}
}
3485. 最大异或和 - 前缀和+Trie+滑动窗口
3485. 最大异或和 - AcWing题库
题目:
思路:
本题要求异或和的最大值
求某一段区间的异或和可以求前缀异或和,也就是S[r]^S[l-1],因为a^x^x=a
因此题目就转化为求异或前缀和S[1]~S[N]中选一个最大的异或对
维护一个长度不超过m的滑动窗口,把窗口外的数从字典树删除,删除操作只要让cnt--就可以
长度不超过m的连续子数组,我们可以枚举右端点s[i],在合法区间内求最大的另一异或数
最大异或对模板
- 想要异或结果最大,则每一位都要尽量不同,这样异或结果每一位1的个数才会最多
- 将每个数字的二进制数(01串),从高位到低位存到trie中
- 对于每一位ai,都尽量往跟他相反的方向走(比如ai为0则走1分支,1则走0分支),如果实在没有相反的分支,则顺着走
/**道阻且长,行则将至*author:Roye_ack
*/
import java.util.*;
import java.io.*;
import java.math.*;class Main
{static int N=3100010;static int[] s=new int[N],cnt=new int[N]; //cnt记录数的出现次数static int[][] tr=new int[N][2]; //son[节点1][值]=节点2 节点1的子节点是节点2static int idx=0;static void insert(int x,int num){int p=0;for(int i=30;i>=0;i--){int u=x>>i&1;if(tr[p][u]==0) tr[p][u]=++idx;p=tr[p][u];cnt[p]+=num;}}static int find(int x){int p=0,res=0;for(int i=30;i>=0;i--){int u=x>>i&1;if(cnt[tr[p][u^1]]!=0){p=tr[p][u^1];res=res*2+1;}else{p=tr[p][u];res*=2;}}return res;}public static void main(String[] args) throws IOException{PrintWriter wt=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));int n=rd.nextInt(),m=rd.nextInt();for(int i=1;i<=n;i++){int x=rd.nextInt();s[i]=s[i-1]^x;}int res=0;insert(s[0],1); //刚开始插入s0for(int i=1;i<=n;i++) //枚举右端点{if(i>m) insert(s[i-m-1],-1); //删掉不在区间内的左端点(合法区间是[i-m,i])res=Math.max(res,find(s[i]));insert(s[i],1);}wt.print(res);wt.flush();}static class rd{static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));static StringTokenizer tk=new StringTokenizer("");static String nextLine() throws IOException{return bf.readLine();}static String next() throws IOException{while(!tk.hasMoreTokens()) tk=new StringTokenizer(bf.readLine());return tk.nextToken();}static int nextInt() throws IOException{return Integer.parseInt(next());}static double nextDouble() throws IOException{return Double.parseDouble(next());}static long nextLong() throws IOException{return Long.parseLong(next());}static BigInteger nextBig() throws IOException{BigInteger d=new BigInteger(rd.nextLine());return d;}}
}
相关文章:
【蓝桥杯集训10】Tire树 字典树 最大异或对专题(3 / 3)
目录 字典树模板 1、插入操作 2、查询操作 143. 最大异或对 - trie 二进制 3485. 最大异或和 - 前缀和Trie滑动窗口 字典树模板 活动 - AcWing 字典树:高效存储和查找字符串集合的数据结构 son[节点1地址][值]节点2地址 —— 节点1的子节点为节点2cnt[节点地…...
docker部署zabbix6.2.7+grafana
目录 1、下载docker 2、下载相关镜像文件 3、创建一个供zabbix系统使用的网络环境 4、创建一个供mysql数据库存放文件的目录 5、启动mysql容器 6、为zabbix-server创建一个持久卷 7、启动zabbix-server容器 8、创建语言存放目录 9、启动zabbix-web容器 10、启动zabbix…...
【Java开发】JUC基础 04:Synchronized、死锁、Lock锁
1 概念介绍并发:同一个对象被多个线程同时操作📌 线程同步现实生活中,我们会遇到“同一个资源,多个人都想使用”的问题,比如,食堂排队打饭,每个人都想吃饭,最天然的解决办法就是,排队…...
离散数学---期末复习知识点
一、 数理逻辑 [复习知识点] 1、命题与联结词(否定¬、析取∨、合取∧、蕴涵→、等价↔),命题(非真既假的陈述句),复合命题(由简单命题通过联结词联结而成的命题) 2、命题公式与赋值(成真、成假)&#x…...
在线安装ESP32和ESP8266 Arduino开发环境
esp32和esp8266都是乐鑫科技开发的单片机产品,esp8266价格便宜开发板只需要十多块钱就可以买到,而esp32是esp8266的升级版本,比esp8266的功能和性能更强大,开发板价格大约二十多元就可以买到。 使用Arduino开发esp32和esp8266需要…...
【Python实战】激情澎湃,2023极品劲爆舞曲震撼全场,爬虫一键采集DJ大串烧,一曲醉人女声DJ舞曲,人人都听醉~(排行榜采集,妙啊~)
导语 哈喽!大家好。我是木木子吖~今天给大家带来爬虫的内容哈。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 今天教大家Python爬虫实战一键采集大家喜欢的DJ舞曲哦! …...
[SSD综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?
版权声明:付费作品,未经许可,不可转载前言SSD (Solid State Drive),即固态硬盘,通常是一种以半导体闪存(NAND Flash)作为介质的存储设备。SSD 以半导体作为介质存储数据&…...
SAP Insurance Analyzer
SAP Insurance Analyzer 是一款用于保险公司财务和风险管理的软件。SAP Insurance analyzer 支持基于 IFRS 17 或 Solvency II 的保险合同估值和计算要求。SAP Insurance Analyzer 于 2013 年 5 月推出,为源数据和结果数据集成了一个预配置的保险数据模型。 源数据…...
自动化测试 ——自动卸载软件
在平常的测试工作中,经常要安装软件,卸载软件, 即繁琐又累。 安装和卸载完全可以做成自动化。 安装软件我们可以通过自动化框架,自动点击Next,来自动安装。 卸载软件我们可以通过msiexec命令行工具自动化卸载软件 用msiexec 命令来卸载软件 …...
05 封装
在对 context 的封装中,我们只是将 request、response 结构直接放入 context 结构体中,对应的方法并没有很好的封装。 函数封装并不是一件很简单、很随意的事情。相反,如何封装出易用、可读性高的函数是非常需要精心考量的,框架中…...
clean
clean code 记得以前写过这题,写的乱七八糟,分析来分析去。 后悔应该早点写代码,leetcode大一就该刷了。 https://leetcode.cn/problems/plus-one/submissions/ class Solution { public:vector<int> plusOne(vector<int>&…...
佛科院计算机软件技术基础——线性表
一、基础知识了解:结构体的理解:我们知道整型是由1位符号位和15位数值位组成,而就可以把结构体理解为我们定义的数据类型,如:typedef struct {int data[2]; //存储顺序表中的元素int len; …...
linux下终端操作mysql数据库
目录 一.检查mysql是否安装 1. 查看文件安装路径 2. 查询运行文件所在路径(文件夹地址) 二.登录mysql 三.列出mysql全部用户 四.常用指令 1.查看全部数据库 2.选择数据库 …...
MySQL参数优化之thread_cache_size
1.thread_cache_size简介 每建立一个连接,都需要一个线程来与之匹配,此参数用来缓存空闲的线程,以至不被销毁,如果线程缓存中有空闲线程,这时候如果建立新连接,MYSQL就会很快的响应连接请求。 show statu…...
gRPC服务健康检查(二):gRPC健康检查协议详解
gRPC健康检查协议健康检查用于检测服务端能否正常处理rpc请求,客户端对服务端的健康检查可以点对点进行,也可以通过某些控制系统(如负载平衡)进行。客户端可以根据服务端返回的状态执行对应的策略。因为GRPC服务可以用于简单的客户…...
Android系统10 RK3399 init进程启动(四十七) Android init 进程整体代码逻辑简述
配套系列教学视频链接:安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本文简单描述一下android init祖先进程启动的基本执行流程,让大家有一个整…...
CSDN 编程竞赛三十二期题解
竞赛总览 CSDN 编程竞赛三十二期:比赛详情 (csdn.net) 竞赛题解 题目1、传奇霸业 传奇霸业,是兄弟就来干。小春(HP为a)遇到了一只黄金哥布林(HP为x)。小春每次能对哥布林造成b点伤害,哥布林…...
Kubernetes 中的 Pod Hook
Pod Hook 我们知道Pod是Kubernetes集群中的最小单元,而 Pod 是有容器组组成的,所以在讨论 Pod 的生命周期的时候我们可以先来讨论下容器的生命周期。 实际上 Kubernetes 为我们的容器提供了生命周期钩子的,就是我们说的Pod Hook,…...
Linux操作系统安装MySQL(rpm安装)
Linux操作系统安装MySQL(rpm安装)1 背景2 环境说明3 准备工作3.1 端口查看3.2 检查安装3.3 创建MySQL用户和组4 MySQL安装4.1 下载MySQL4.2 解压安装包4.3 安装MySQL4.4 初始化MySQL4.5 启动MySQL4.6 设置MySQL初始密码4.6.1 查看数据库初始密码4.6.2 更…...
MySQL高级第二讲
目录 二、MySQL高级02 2.1 触发器 2.1.1 触发器介绍 2.1.2 创建触发器 2.2 MySQL的体系结构 2.3 存储引擎 2.3.1 存储引擎概述 2.3.2 各种存储引擎特性 2.3.3 InnoDB 2.3.4 MyISAM 2.3.5 MEMORY 2.3.6 MERGE 2.3.7 存储引擎的选择 2.4 优化sql 2.4.1 查看sql执行…...
凸优化专题1
多变量函数的求导与求梯度/矩阵求导 1. 导数 定义: 设f:Rn→Rm,且x∈intdomf,则f在点x的导数(或称Jacobian)记为矩阵Df(x)∈Rmnf:\R^n \rightarrow \R^m, 且x\in \mathbf{int}\ \mathbf{dom} f, 则f 在点x的导\\数(或称Jacobian)记为矩阵 Df(x) \in \R^{m\times n}f:Rn→Rm,且…...
【蓝桥杯每日一题】递推算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
Unity性能优化: 性能优化之内存篇
前言 本文和传统的内存优化不一样,不是讲如何降低内存占用,而是讲编程开发中要注意的内存问题以及一些内存技术的演变与原理。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀 1: Application进程…...
华为OD机试题,用 Java 解【内存资源分配】问题
最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…...
微服务之Nacos注册与配置
🏠个人主页:阿杰的博客 💪个人简介:大家好,我是阿杰,一个正在努力让自己变得更好的男人👨 目前状况🎉:24届毕业生,奋斗在找实习的路上🌟 …...
Android 动画详解
Android动画的分类与使用学习Android必不可少的就是动画的使用了,在Android版本迭代的过程中,出现了很多动画框架,这里做一个总结。Android动画类型分类逐帧动画【Frame Animation】,即顺序播放事先准备的图片。补间动画【Tween A…...
Linux -- 程序 进程 线程 概念引入
程序与进程 :程序 :什么是程序 ???伪官方 : 二进制文件,文件存储在磁盘中,例如 /usr/bin 目录下 。 是静态。 简单讲 :# 我们都学习了语言,比如下面这串代…...
Android ART dex2oat
一、什么是dex2oat Dex2oat (dalvik excutable file to optimized art file) ,是一个对 dex 文件进行编译优化的程序,在我们的 Android 手机中的位置是 /system/bin/dex2oat,对应的源码路径为 android/art/dex2oat/dex2oat.cc,通…...
「RISC-V Arch」RISC-V 规范结构
日期:20230228 规范分类 根据 RISC-V 设计哲学,其规范文档也是高度模块化的: ISA 规范(2 篇) 非特权规范特权规范 非 ISA 规范(6篇) Trace规范ABI 规范外部调试规范PLIC 规范SBI 规范UEFI 协…...
【C】线程控制
创建线程 #include <pthread.h>int pthread_create(pthread_t * thread,const pthread_attr_t * attr,void *(*start_routine)(void*), void * arg);返回值:成功返回0,失败返回错误号。 thread:成功返回后,新创建的线程的…...
小企业网站建设地点/关于友谊的连接
JVM内存结构 《深入理解Java虚拟机(第2版)》中的描述是下面这个样子的: JVM的内存结构大概分为: 堆(Heap):线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。方法区&a…...
美妆网站建设规划/免费的行情网站app
深究ReentrantLock源码及其使用方法 1.先附上ReentrantLock类的源码,然后再进行一行一行分析 /*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimpor…...
粘贴以下代码到网站首页代码的与标签之间/营销课程
数据库是组成Web项目最重要的部分之一,所以数据中执行的sql语句的效率会影响整个项目的性能,为了提高sql语句的执行效率就需要对sql语句进行相关的优化,MySQL数据库因为其开源免费的特点是目前使用最广泛的数据库之一,下面对mysql…...
想做网站怎么做/网站空间
1、执行带有输出类型参数的存储过程set serveroutput on;DECLAREdwbh varchar2(20);out_param varchar2(1000);BEGINdwbh:3609000001;pkg_znpj.znpj_zf(dwbh,out_param);dbms_output.put_line(out_param);END;/2、直接输出一句话set serveroutput on;begindbms_output.put_lin…...
怎样做购物网站/个人网站推广平台大全
文章目录为什么需要transition-group语法没有出场动画与有出场动画比较没有出场动画有出场动画不设置tag标签,默认渲染成san标签v-move类设置平滑过渡不设置v-move的问题设置了v-move类实例为什么需要transition-group 因为我们有时不只是需要单个元素动画ÿ…...
门户网站建设公司渠道/企业网站建设价格
在安装完red hat enterprise linux 6.5后,通过ftp不能使用root用户,将/etc/vsftpd/ftpusers和/etc/vsftpd/user_list两个文件中的root通过添加#号注释掉,重启ftp服务:service vsftpd restart后,依然报错:50…...