Tire 树(字典树/前缀树)

一、定义与结构

  用来快速存储查找字符串集合的一种数据结构

将字符串按顺序连接根节点上,并在字符串结束的地方打上标记并计数。 

二、模板题

acwing 835 Trie 树的字符串统计

题目:

维护一个字符串集合,支持两种操作:

  1. I x 向集合中插入一个字符串 x;
  2. Q x 询问一个字符串在集合中出现了多少次。

共有 N个操作,所有输入的字符串总长度不超过 10^5,字符串仅包含小写英文字母。

输入格式

第一行包含整数 N,表示操作数。

接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。

输出格式

对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x 在集合中出现的次数。

每个结果占一行。

数据范围

1≤N≤2∗10^4

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int cnt[N], son[N][26], idx;/*cnt表示字符串的个数
son 前一维表示父节点,后一维表示子节点 idx表示当前用到了哪个下标,下标为零的点,即是根节点,也是空节点*/
char str[N];void insert(char s[])//存储字符串,构建字典树
{int p = 0;for (int i = 0; s[i]; i ++ )//字符串最后一位为“/0”所以可以做for循环中的结束条件{int u = s[i] - 'a';//用数字表示所有小写字母if (!son[p][u])  son[p][u] = ++ idx;//如果没有子节点,创建新的节点p = son[p][u];//移动到下一个节点,继续}cnt[p] ++ ;//字符串数量++
}int query(char s[])//统计字符串的个数
{int p = 0;for (int i = 0; s[i]; i ++ ){int u = s[i] - 'a';if (!son[p][u])  return 0;//没有符合条件的字符串,结束p = son[p][u];//有则继续}return cnt[p];
}int main()
{int n;scanf("%d", &n);while (n -- ){char op[5];scanf("%s%s", op, str);if (*op == 'I') insert(str);else    printf("%d\n", query(str));}return 0;
}

2.acwing143最大异或对

题目

在给定的 N个整数 A1,A2……AN中选出两个进行 xor(异或)运算,得到的结果最大是多少?

输入格式

第一行输入一个整数 N。

第二行输入 N个整数 A1~AN。

输出格式

输出一个整数表示答案。

数据范围

1≤N≤10^5
0≤Ai<2^31

/*字典树不仅可以存储字符串也可以存储二进制数字*/
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=31*N;
int son[M][2],idx;
void insert(int x)
{int p=0;for(int i=30;i>=0;i--){int u=x>>i&1;//u代表x的二进制中的第i位数字if(!son[p][u])son[p][u]=++idx;p=son[p][u];}
}
int query(int x)
{int p=0,t=0;//保存与x异或结果最大的数for(int i=30;i>=0;i--)//从最高位取出每一位{int u=x>>i&1;if(son[p][!u])//如果树中能走到!u就走到!u.{t=(t<<1)+!u;//更新x异或的对象p=son[p][!u];//走到!u}else {t=(t<<1)+u;p=son[p][u];}}return t;
}
int main()
{int n,ans=0;cin>>n;while(n--){int x;cin>>x;insert(x);int t=query(x);ans=max(ans,x^t);}cout<<ans<<endl;return 0;
}

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

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

相关文章

【时时三省】(C语言基础)怎样定义和引用一维数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 一维数组是数组中最简单的&#xff0c;它的元素只需要用数组名加一个下标&#xff0c;就能唯一地确定。如上面介绍的学生成绩数组s就是一维数组。有的数组&#xff0c;其元素要指定两个下标才…

编译faiss

编译faiss-1.10.0 首先确保自己cmake的版本&#xff1a; cmake --version 确保其版本至少为CMake 3.24.0 or higher is required。 其次安装OpenBLAS&#xff1a; https://github.com/OpenMathLib/OpenBLAS 去这里去安转Openblas内容&#xff0c;然后确保自己的CPU的指令集是存…

Linux 入门:操作系统进程详解

目录 一.冯诺依曼体系结构 一&#xff09;. 软件运行前为什么要先加载&#xff1f;程序运行之前在哪里&#xff1f; 二&#xff09;.理解数据流动 二.操作系统OS(Operator System) 一&#xff09;.概念 二&#xff09;.设计OS的目的 三&#xff09;.如何理解操作系统…

word交叉引用图片、表格——只引用编号的处理方法

交叉引用图片/表格 在“引用”选项卡上的“题注”组中&#xff0c;单击“插入题注”。勾选【从题注中排除标签】。在文中插入题注。 【注 意】 这时候插入的题注只有编号项了。然后手动打上标签【TABLE】&#xff0c;并在标签和编号项之间加上【样式分隔符&#xff0c;AltCt…

rails 8 CSS不起效问题解决

很久没用rails了&#xff0c;最近打算重新复习一下。在配置好环境后&#xff0c;创建了项目&#xff0c;通过脚手架创建了数据库表&#xff0c;和相关的文件。但我发现却没有生成相应的CSS文件&#xff0c;可能是rails8 取消了吧。于是自己手动创建了相应的css文件。但是刷新页…

【nlohmann\json.hpp】‘_snprintf‘: is not a member of ‘std‘

这个问题时有发生但是为啥现在更新了vs2022 后,发生了这些报错:2>(compiling source file ../worker/src/fargo/PacedVideoSenderGo.cpp) 2>D:\XTRANS\thunderbolt\ayame

数据结构--【二叉树】

目录 定义结构体&#xff1a; 初始化&#xff1a; 手动创建一个二叉树&#xff1a; 前序遍历&#xff1a; 中序遍历&#xff1a; 后序遍历 二叉树节点个数&#xff1a; 叶子节点个数&#xff1a; 二叉树第k层节点个数&#xff1a; 二叉树的高度&#xff1a; 查找值为x…

深入解析Linux进程间通信(IPC):机制、应用与最佳实践

引言 在多任务操作系统中&#xff0c;进程间通信&#xff08;Inter-Process Communication, IPC&#xff09;是协同工作的核心机制。Linux作为现代操作系统的典范&#xff0c;提供了8种主要IPC方式&#xff0c;从传统的管道到面向网络的套接字&#xff0c;每种方法都暗藏独特的…

2025年“深圳杯”数学建模挑战赛B题-LED显示屏颜色转换设计与校正

LED显示屏颜色转换设计与校正 小驴数模 问题的背景 走在晚风都市&#xff0c;或春日田野&#xff0c;我们都会看到一个色彩斑斓的世界。色彩是我们对世界一种重要感知。什么是色彩&#xff0c;或颜色&#xff1f;颜色是光作用于人眼引起的视觉感知现象&#xff0c;它与物体的…

Java学习手册:Spring MVC 架构与实现

一、Spring MVC 概述 Spring MVC 是 Spring 框架的一个模块&#xff0c;它提供了一套 Web 应用开发的解决方案&#xff0c;实现了 MVC&#xff08;Model-View-Controller&#xff09;设计模式。Spring MVC 提供了清晰的分离逻辑层、视图层和控制器层的结构&#xff0c;便于开发…

【TF-BERT】基于张量的融合BERT多模态情感分析

不足&#xff1a;1. 传统跨模态transformer只能处理2种模态&#xff0c;所以现有方法需要分阶段融合3模态&#xff0c;引发信息丢失。2. 直接拼接多模态特征到BERT中&#xff0c;缺乏动态互补机制&#xff0c;无法有效整合非文本模态信息 改进方法&#xff1a;1. 基于张量的跨模…

maven坐标导入jar包时剔除不需要的内容

maven坐标导入jar包时剔除不需要的内容 问题描述解决方案 问题描述 maven坐标导入jar包时剔除不需要的内容 解决方案 Spring Boot 默认使用 Logback&#xff0c;需在 pom.xml 中排除其依赖&#xff1a; <dependency><groupId>org.springframework.boot</gro…

C与指针——输入输出

错误定位 当一个库函数出错时&#xff0c;errno会被重置 perror(const char* s);\\输出s: errno 对应的错误信息 \\如果单独想要错误信息可以 char* e strerror(errno);\\系统错误码转换为对应的错误信息字符串输出缓冲区 一般输出缓冲区满的时候才刷新&#xff0c;也就是…

JSON Web Token 默认密钥 身份验证安全性分析 dubbo-admin JWT硬编码身份验证绕过

引言 在web开发中&#xff0c;对于用户认证的问题&#xff0c;有很多的解决方案。其中传统的认证方式&#xff1a;基于session的用户身份验证便是可采用的一种。 基于session的用户身份验证验证过程&#xff1a; 用户在用进行验证之后&#xff0c;服务器保存用户信息返回sess…

STM32GPIO输出实战-LED模板

STM32GPIO输出实战-LED模板 一&#xff0c;LED控制原理1&#xff0c;LED控制时GPIO的配置2&#xff0c;LED连接方式3&#xff0c;使用HAL库控制LED的常用函数&#xff1a; 二&#xff0c;任意控制LED模板1&#xff0c;Led底层2&#xff0c;代码详细解析 三&#xff0c;实用技巧…

第二十七届华东杯数学建模A 题 跳台滑雪问题 完整思路模型及代码

题目背景 跳台滑雪起源于 19 世纪&#xff0c;是冬季运动会的传统竞技项目。今年亚洲冬季运动会在我国 哈尔滨举行&#xff0c;跳台滑雪项目吸引了包括中国在内的亚洲各国运动健儿踊跃参加&#xff0c;我国运动员取得了优异的成绩。 跳台滑雪融合了速度、力量与精确控制&…

Python之学习笔记(六)

文章目录 1. 字典&#xff08;Dictionary&#xff09;2. 集合&#xff08;Set&#xff09;3. 字典 vs 集合4. 应用场景5. 注意事项 Python中的字典&#xff08; dict&#xff09;和集合&#xff08; set&#xff09;是两种高效且常用的数据结构&#xff0c;适用于不同的场景。…

缓存与数据库的高效读写流程解析

目录 前言1 读取数据的流程1.1 检查缓存是否命中1.2 从数据库读取数据1.3 更新缓存1.4 返回数据 2 写入数据的流程2.1 更新数据库2.2 更新或删除缓存2.3 缓存失效 3 缓存与数据库的一致性问题3.1 写穿&#xff08;Write-through&#xff09;策略3.2 写回&#xff08;Write-back…

PowerShell 备份 Windows10/11 还原计算机驱动程序SOP

一、现在计算机C目录下创建一个新的文件夹名称为 driverbackup 二、打开cmd 以管理员身份执行 dism /online /export-driver /destination: C:\driverbackup 在正常情况下&#xff0c;Windows 10会自动检测您的设备所需的驱动程序&#xff0c;并将其安装到您的PC上。 但是&am…

自监督学习(Self-supervised Learning)李宏毅

目录 Self-supervised Learning简介&#xff1a; BERT : How to use BERT case1&#xff1a;sequence to class 语言积极性OR消极性判断 case2&#xff1a;sequence to sequence句子中的词语词性标注 case3&#xff1a;sequence2 to class两个句子是不是一个为前提一个为…