【封装】Trie
#include<cstdio>
const int N = 1e6 + 5;
struct Trie{
int root, id;
bool bit[32];
struct Node{
int val, siz, ch[2];
Node(){ ch[0] = ch[1] = -1, val = siz = 0; }
}node[N];
void get(int x){
for(int i = 0; i < 32; ++i, x >>= 1) bit[i] = x & 1;
}
void init(){
for(int i = 0; i <= id; ++i){
node[i].ch[0] = node[i].ch[1] = -1;
node[i].val = node[i].siz = 0;
}
id = root = 0;
}
void insert(int x){
get(x);
int u = root;
for(int i = 31; i >= 0; --i){
if(node[u].ch[bit[i]] == -1) node[u].ch[bit[i]] = ++id;
u = node[u].ch[bit[i]];
++node[u].siz;
}
node[u].val = x;
}
int find(int x){ // 返回与x异或最大的数
get(x);
int u = root;
for(int i = 31; i >= 0; --i){
int s1 = node[u].ch[!bit[i]], s2 = node[u].ch[bit[i]];
if(s1 != -1 && node[s1].siz > 0) u = s1;
else if(s2 != -1 && node[s2].siz > 0) u = s2;
else return x; // 注意根据需要调整返回值
}
return node[u].val;
}
void del(int x){
get(x);
int u = root;
for(int i = 31; i >= 0; --i){
u = node[u].ch[bit[i]];
--node[u].siz;
}
}
}trie;
【封装】Trie的更多相关文章
- Trie(字典树)解析及其在编程竞赛中的典型应用举例
摘要: 本文主要讲解了Trie的基本思想和原理,实现了几种常见的Trie构造方法,着重讲解Trie在编程竞赛中的一些典型应用. 什么是Trie? 如何构建一个Trie? Trie在编程竞赛中的典型应用 ...
- 洛谷.3065.第一!First!(Trie 拓扑)
题目链接 \(Description\) 给出n个字符串,问重定义英文字符的顺序(即字典序),有哪些单词可能排在第一 \(Solution\) 一个单词想要排在第一,首先是没有其它字符串是它的前缀.那 ...
- python Trie树和双数组TRIE树的实现. 拥有3个功能:插入,删除,给前缀智能找到所有能匹配的单词
#coding=utf- #字典嵌套牛逼,别人写的,这样每一层非常多的东西,搜索就快了,树高26.所以整体搜索一个不关多大的单词表 #还是O(). ''' Python 字典 setdefault() ...
- 学习笔记:安装swig+用SWIG封装C++为Python模块+SWIG使用说明
这段时间一直在摸索swing,用它来封装C++代码来生成python脚步语言.并总结了swing从安装到配置再到代码封装编译生成动态库的整个过程,下面这篇文章都是我在实际的运用中的一些经验总结,分享给 ...
- Trie树的插入,查前缀,查单词,删前缀和删单词。
这个Trie原先用C++就敲得很熟了,看了蓝桥杯的视频后学会把一个功能这样封装起来,以后用的时候就很爽可以直接调用了,所以就用Java写了: public class Trie { private f ...
- 数据结构 | 30行代码,手把手带你实现Trie树
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法和数据结构专题的第28篇文章,我们一起来聊聊一个经典的字符串处理数据结构--Trie. 在之前的4篇文章当中我们介绍了关于博弈论的 ...
- 算法总结篇---字典树(Trie)
目录 写在前面 具体实现 引例: 引例代码: 例题 Phone List Solution: The XOR Largest Pair Solution L语言 Solution: 写在前面 字典树是 ...
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Ajax实现原理,代码封装
都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...
随机推荐
- 规范代码编写风格就用 eslint 和 prettier
eslint 可以用于规范我们的编码,使得项目中的代码风格一致,更利于阅读和维护,而 prettier 可以在当我们代码不符合 eslint 规范是进行部分自动修复. eslint 通过 npm in ...
- 工具—批量备案信息查询并生成fofa查询语句
描述: 1.可以输入一个或多个公司名或域名或备案号,得到备案信息(备案公司名,备案公司网站url,备案号,域名类型,审核时间) 2.读取生成的信息并转为fofa语句,方便了指定目标的信息收集速度 工具 ...
- CF1787E The Harmonization of XOR 题解
CF1787E The Harmonization of XOR 题目大意 给定 \(n\) 个数 \([1, 2, 3, \cdots, n]\) 和两个正整数 \(k\) 和 \(x\). 将这些 ...
- 前后端分离中台框架 Admin.Core 学习-介绍与配置说明
中台框架后端项目 Admin.Core 的介绍与配置说明 中台admin是前后端分离权限管理系统,Admin.Core为后端项目,基于.NET 7.0开发. 支持多租户.数据权限.动态 Api.任务调 ...
- 高性能MySQL实战(一):表结构
最近因需求改动新增了一些数据库表,但是在定义表结构时,具体列属性的选择有些不知其所以然,索引的添加也有遗漏和不规范的地方,所以我打算为创建一个高性能表的过程以实战的形式写一个专题,以此来学习和巩固这些 ...
- Linux虚拟机报错Job for network.service failed because the control process exited with error codeLinux虚拟机报错的解决方法
发布于 2 天前 3 次阅读 Linux虚拟机设置静态ip后,突然发现联网连不上了,ssh也无法使用,重启network后仍旧无法使用.按照网络上的方法发现没有效果后,右键如下位置将nat模式转换为 ...
- AI绘画关键词Prompt:分享一些质量比较高的StableDiffusion(SD)关键词网站
今天向大家推荐一些SD(StableDiffusion)高质量的 关键词 网站.这些网站的质量可靠,能为大家在创建 AI 绘画时提供有效的参考.以下是六个推荐的网站,优缺点分析. 有几个质量还算是挺高 ...
- plt.rcParams运行时修改全局配置参数
plt.rcParams简单介绍 plt.rcParams即 "运行时配置参数"("runtime configuration parameters"),是运行 ...
- Antd Form表单中Input输入框 在IE9下按下任何按键都会报校验失败
antd Form表单中Input输入框 在IE9下按下任何按键都会报校验失败,导致输入框输入不了任何内容! 可能你的react及react-dom版本由于过高导致antd组件不能兼容,需要对reac ...
- SQL Server关于AlwaysOn的理解-读写分离的误区(一)
前言 很多人认为AlwaysOn在同步提交模式下数据是实时同步的,也就是说在主副本写入数据后可以在辅助副本立即查询到.因此期望实现一个彻底的读写分离策略,即所有的写语句在主副本上,所有的只读语句分离到 ...