数据结构—字典树
文章平均质量分 78
Ezereal
这个作者很懒,什么都没留下…
展开
-
hdu 4825 Xor Sum
题意: 给你n个数,然后给你m组询问,每组询问给你一个数,输出n个数中与该数亦或的最大的那个数,输出的是被亦或的那个数,不是亦或后的结果。 思路: 我用的是字典树+贪心,首先我们可以把前n个数拆成2进制,然后补全前导0,我是补成了34位,然后把他存在字典树中,对于每个询问,把他变成二进制,然后补全前导0,在字典树上查找,查找的时候用贪心的思想,因为前面的是高位,所原创 2015-10-03 15:13:55 · 598 阅读 · 0 评论 -
hdu 2846 Repository
题目属于判断字符串中是否包含子串的问题. 思路:对于一般的字典树,用来判断前缀,而这里不能直接这么去建树。在建树的时候将字符串X=X1X2....Xn的分别以X1,X2....Xn开头的后缀子串插入到Trie树中,如此一来就可以判断某个字符串是否被包含在另一个字符串当中。当然,这里还有个问题,比如插入了字符串abab,那么当查找字符串ab时就会重复计数,因此需要多设计一个标识以表示在插入"aba原创 2015-10-03 12:36:35 · 492 阅读 · 0 评论 -
hdu 4287 Intelligent IME
题目大意:手机键盘中与数字2相对应的字母有a,b,c;3相对应的字母有d,e,f。给出一些数字串如34,和一些小写字母串。求小写字母对应的数字串出现的次数。字符串abc对应的数字串是111,dh对应的数字串是34。则小写字符串中111出现一次,34出现一次。 题解:可以直接字典树,或者暴力做,毕竟数据比较弱。。。一开始理解错题意,便把数字按照所有转化一遍,再去用字典树,结果超时。。。直接将数原创 2015-10-03 14:10:22 · 586 阅读 · 0 评论 -
Manthan, Codefest 16 C. Spy Syndrome 2 ★
题意: Yash对自己的一段话加密: 1.将所有大写字母转成小写 2.将每个单词翻转 3.去除所有空格 现给出这段话中可能出现的一些单词,问这段话的原话是什么? 若有多种解输出任意一种 题解: 注意到单词数不超过1000000,考虑建立一棵trie 原话字符 O(n*w) 是啊 直接倒着处理,转载 2016-09-02 20:35:08 · 1105 阅读 · 0 评论 -
Educational Codeforces Round 12 E. Beautiful Subarrays 预处理前缀+字典树优化★ ★
题意: 求规模为1e6数组中,连续子串xor值大于等于k值的子串数; 思路: xor为和模2的性质,所以先预处理之后,可以枚举这种确实子串区间的方法为O(n^2); 优化?把每一个前缀xor扔到二叉树中,从根节点出发,以高位前缀值的二进制数构造一颗二叉树,这样就可以在构造的时候,实现对子树节点个数的求解;之后在线求解到当前节点的可选的前缀xor的个数, 即以k为主线原创 2016-09-24 22:26:20 · 562 阅读 · 0 评论 -
模板 可持久化字典树
// Made by xiper // updata time : 2015 / 12 / 8 // test status: √ // 使用前调用初始化函数 init() 同时 root[0] = 0; struct Trie_Persistent { const static int LetterSize = 5; // 字符集大小 const static int Tri转载 2016-10-19 08:44:10 · 688 阅读 · 0 评论