
Trie树
mis_deer
Make_myself.
展开
-
[LightOJ 1269] Consecutive_Sum (Trie树妙用)
LightOJ - 1269 题意是给你一个序列,求子序列区间异或起来的最大值和最小值 首先可以利用类似前缀和的形式预处理一下,inpt[i]^=inpt[i-1] 然后一段区间[l,r]的异或值就等于 inpt[r]^inpt[l-1] 然后问题就转化成了求区间两个数,异或的最大值和最小值,接下来就是问题的关键显然这是一个位运算的题目,通常都要按位,从高位到低位来考虑 先求最大值,如果某原创 2016-04-07 20:39:36 · 439 阅读 · 0 评论 -
[POJ 3764] The xor-longest Path (Tire树 + 贪心)
POJ - 3674 题意是给你一个树,每条边有一个权值,求得树上一条路径,使路径上每条边权值的异或和最大 首先用一个 DFS把根到任意点的路径的异或和求出来 xorv[i] 由异或的性质可得点 u和点 v的异或和即为 xorv[u]^xorv[v] ( 根到两点 LCA的异或和会消去) 然后问题就转化成在区间内找两个值,使得他们的异或和最大 与 LightOJ - 1269一样的做法,用原创 2016-04-07 20:47:59 · 408 阅读 · 0 评论 -
[SCU 4494] 双剑合并 (xor字典树)
SCU - 4494 给定两个序列,问从两个序列中各取一个值的异或和最大为多少把 A序列中的数字看成一个二进制的 01串,然后存到 Trie树里 然后将 B序列的数字同样看成一个 01串,然后在 Trie树上从高位到低位贪心地查找 如果B序列中查找的 01串当前位为 0,则找 Trie树上为 1的子儿子 否则就只能走为 0的右儿子,反之亦然,然后往下走 时间复杂度 O(N)#inclu原创 2016-05-10 21:21:16 · 776 阅读 · 0 评论 -
[SCU 4503] TooEasy Or TooDifficult (Manacher+xor-Trie)
SCU - 4503板子题,依题意描述分为三个步骤 1. 求每个位置为中心的回文串,以及最大回文串 2. 求每个回文串的长度的异或前缀和 3. 求两个异或前缀和异或的最大值 (xor-Trie) 然后用快速幂算出 JD,再和 FJD比大小即可注意一下 Trie上要先插入一个 0#pragma comment(linker, "/STACK:102400000,102400000")#i原创 2016-05-10 23:16:49 · 893 阅读 · 0 评论 -
[HDU 5845] Best Division (xor-trie+dp)
HDU - 5845 给定一段数列,将其划分成最多的段 并且每段长度不超过 L且异或和不超过 X有一个很显然的 (N2)\mathcal{O}(N^2)的dp做法 dp[i]dp[i]表示到 ii为止最多能分成多少段 然后从前面最多 LL个 dp值转移出来 但是对前面 LL个 dp可以用 xor-trie维护一下 这样一来时间复杂度就是 (Nlog(A))\mathcal{O原创 2016-08-17 11:18:49 · 885 阅读 · 0 评论 -
[Codeforces 557E] Ann and Half-Palindrome (Trie树+子串排序)
Codeforces - 557E 给定一个只有a和b的字符串,输出它第 K 个半回文子串 半回文串的定义是,所有奇数位置都是回文的 其中字符串长度不超过5000 ,保证有解可以直接暴力找出所有半回文串,复杂度 (NlogN)\mathcal{O}(NlogN)问题就在于如何找第 K大的,直接暴力排序是不支持的 我太久没做字符串题了,套路全忘光了 于是偷瞄了一下题解,看到了一原创 2017-01-21 16:29:20 · 362 阅读 · 0 评论