字符串:Trie 字典树
文章平均质量分 92
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
2016 UESTC Training for Search Algorithm & String H - 中二少女与字符串 Trie 字典树
Trie 字典树分别求以l为起始点的字符串有多少个前缀符合条件,答案即为和。从后往前,每次s[l..n-1]都加入字典树中。不能从前往后的,从前往后漏了很多,或者说要在里面加一个for 把j <= k <= i 把s[k...i]插到Trie里,这样显然有大量的重复,而且O(n^2)也必定超时而从后往前插, 则左端点在不断左移,故每次把s[l..r]插入是相当于也插入了s[l+1..r],s[l+2..r]等这样就变成O(n)了产生的新节点就是符合条件的新子串。一边扫一边控制最长可到的r,即原创 2016-06-10 11:00:13 · 943 阅读 · 0 评论 -
Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset 二进制树、Trie
二进制树、Trie用一个二进制树(字典树的一种特殊化)来储存child[x][k] 表示以x为父节点, k 为边, 的子节点sz[x]表示这个节点的值, 值为0的时候节点不存在查询的时候, 从根开始走, 尽量去走 和 val 的当前二进制为不相等的节点, 此时的二进制异或为 1 , k = ((val >> i) & 1) ^ 1, res ^= 1 << i; 如果没有再走二进制为相等的节点 if(!sz[chil原创 2016-09-09 02:17:36 · 1207 阅读 · 0 评论 -
UVALive - 3703 Billing Tables Tire、字典树
题意:对于11位数字串(电话号码),按优先级给定n个区间,每个区间有一个标记。若一个电话号码在某个区间内(如有多个则取优先级最高的区间),则电话号码具有该区间的标记。求一个最小前缀与标记的对应表,使若一个号码的前面与某个前缀匹配,则该号码一定具有该前缀的标记,且不能再与其它前缀匹配。Tire、字典树把区间按照从上到下的顺序插入到Tire中,每个根到叶子节点的路径就是一个符合要求的前缀。每个节点都表示一个电话号码前缀,若某一个节点被一个区间完全覆盖或者几个具有相同标记的区间完全覆盖,则可作为一个叶子节点原创 2017-03-29 18:48:34 · 1115 阅读 · 0 评论 -
UESTC 1582 奇迹的魔法啊,再度出现! 二进制树(字典树的一种特殊情况)
题意:给出n个非负整数a1,a2,…,an对于m次询问,第j次询问给定一个正整数xj,输出max{a1XORxj,a2XORxj,…,anXORxj}。二进制树(字典树的一种特殊情况)先把所有的ai按照31比特位存入到二进制树(不够的相当于在前面补了0),child[x][k] 表示以x为父节点, k 为边, 的子节点sz[x]表示这个节点的值, 值为0的时候节点不存在查询的时候,从根开始走,尽量去走和val的当前二进制为不相等的节点, 此时的二进制异或为1,k = ((val >> i)原创 2017-05-16 18:42:06 · 901 阅读 · 0 评论 -
HDU 6138 Fleet of the Eternal Throne 后缀数组+字典树
题意:给出n(n<=1e5)个字符串,且字符串的字符总和<=1e5,给出m个询问,每次给定x,y,找出对于给定str[x]和str[y]的公共子串且满足这个串是所有串中的某个串的前缀,要求所得的公共串的长度尽可能大。后缀数组+字典树首先用给出的n个字符串建立字典树,然后对于每次的询问,把str[x]和str[y]用‘#’连起来然后跑出后缀数组,对于所有的ind[i](其中sa[ind[i]] <= len, ind[i]为其在sa数组中的下标),然后对于 ind[i] - ind[i-1] > 1原创 2017-08-19 20:52:50 · 774 阅读 · 0 评论