zoukankan
html css js c++ java
字典树与01字典树
之前在做一道关于字符串匹配的题时,用到了[字典树](https://www.cnblogs.com/orangee/p/8912971.html),但那时是用指针实现的,这次又遇到需要使用字典树这一结构的题,向学姐要了她的板子,学习了用数组实现的方法,对于解题而言,更为简短快速。 因为题目要求最大异或和,因此用的是01字典树,在字典树的基础上稍作修改。 以下为字典树和01字典树的普遍实现: 字典树 ```C++ #include
#include
using namespace std; struct Trie { static const int N = 101010 , M = 26; int node[N][M],cnt[N],root,L; //cnt记录对应节点的字符串个数 void init() { fill_n(cnt,N,0); fill_n(node[N-1],M,0); L = 0; root = newnode(); } int newnode() { fill_n(node[L],M,0); return L++; } void add(char *s) { int p = root; for(int i=0;s[i];++i) { int c = s[i] - 'a'; if(!node[p][c]) node[p][c] = newnode(); p = node[p][c]; } ++cnt[p]; } }; ``` 01字典树(可用于求异或和最大问题,long long型开64倍,int型开32倍) ```C++ #include
using namespace std; struct Trie_01 { static const int maxn=1e5+10,N = 32*maxn,M = 2; int node[N][M],value[N],rt,L; //value记录对应节点的值,用于返回 void init() { fill_n(node[N-1],M,0); fill_n(value,N,0); L = 0; rt = newnode(); } int newnode() { fill_n(node[L],M,0); return L++; } void add(int x) { int p = rt; for (int i=31;i>=0;--i) { int idx = (x>>i)&1; if (!node[p][idx]) { node[p][idx] = newnode(); } p = node[p][idx]; value[p]=min(value[p],x); } } int query(int x) { int p = rt; for (int i=31;i>=0;--i) { int idx = (x>>i)&1; if (node[p][idx^1]) p = node[p][idx^1]; else p = node[p][idx]; } return value[p]; } }; ```
查看全文
相关阅读:
[Aaronyang] 写给自己的WPF4.5 笔记23 [3d交互与动画 4/4]
[Aaronyang] 写给自己的WPF4.5 笔记22 [3d交互与动画 3/4]
[Aaronyang] 写给自己的WPF4.5 笔记21 [3d课 2/4]
[Aaronyang] 写给自己的WPF4.5 笔记20 [3d课 1/4]
[Aaronyang] 写给自己的WPF4.5 笔记19[Visual类图文并茂讲解]
[Aaronyang] 写给自己的WPF4.5 笔记18[几何图形*Geometry图文并茂讲解]
[Aaronyang紫色博客] 写给自己的WPF4.5-Blend5公开课系列 3
[Aaronyang紫色博客] 写给自己的WPF4.5-Blend5公开课系列 2-更进一步
[Aaronyang紫色博客] 写给自己的WPF4.5-Blend5公开课系列 1
[Aaronyang] 写给自己的WPF4.5 笔记15[AyArc诞生-WPF版本绚丽的环状图,Ay制作,AyWindow强势预览]
原文地址:https://www.cnblogs.com/orangee/p/9090287.html
最新文章
html button 点击 显示倒计时秒数
mac air 2012 mid 使用bootcamp 安装windows
Docker 常用命令
使用grep查找字符串
VMware 虚拟机磁盘
tmux常用配置
govendor使用
Ubuntu16.04搭建Postfix作为SMTP服务器
python2.7 处理unicode和ascii字符串混用问题
错误:OSError: [Errno 1] Operation not permitted: 'lib/python/six-1.4.1-py2.7.egg-info'
热门文章
centos6 通过 kvm 安装 centos7
KVM上如何让虚拟机支持虚拟化(kvm虚拟化的嵌套)
VirtualBox 端口转发 SSH
Jenkins Post Build网址
Linux install svn server
Java Lombok
vertx插件使用vertx-maven-plugin
java协变逆变,PECS
Vert.x 示例
[Aaronyang] 写给自己的WPF4.5 笔记24 [与winform交互-flash-DEMO-收尾篇1/6]
Copyright © 2011-2022 走看看