字典树
Bahuia
软件工程博士
展开
-
CF - 665E 字典树
题意: 给出一串长度为n的序列,找到有多少个子串的异或和 ≥ k。 思路: 字典树的套路,因为异或和满足前缀和性质,所以[l,r]区间内的a[i]的异或和就可以表示为sum[r]^sum[l-1],这样构造一个sum的字典树。 每次用sum[i]在字典树上爬,同时与k进行每一位的比较,一定要保证sum[i]和它爬的字典树的路径的异或和要≥k,所以异或和的每一位都要≥k的每一位。故分为四种情原创 2017-02-18 15:09:51 · 1043 阅读 · 0 评论 -
HDU - 5536 字典树
题意: 给出长度为n的序列s1到sn,以及一个表达式 (si + sj) ^ sk的最大值,^代表异或运算,其中i,j,k不能相同。 思路: 一个典型的字典树处理异或和的问题,思路就是先将所有si按照二进制位从高到低拆成32位然后储存在字典树中,然后枚举i和j,让s[i]+s[j]在字典树上爬,每一位尽量往与当前位数相反的方向爬,这样最终结果这一位就是1,如果相反方向节点不存在,那么往相同方原创 2017-02-14 11:29:30 · 405 阅读 · 0 评论 -
UVA 11488 字典树
题意:题目链接:https://vjudge.net/problem/UVA-11488 给出n个串,找出一个串的集合,使得集合中所有串的最长公共前缀与集合元素的个数的乘积最大。思路:字典树简单应用代码:#include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 5e4 + 10;stru原创 2017-09-20 08:54:30 · 503 阅读 · 0 评论