字符串----Trie
小松萘
厉害的人可真多啊
展开
-
CodeForces - 923C Perfect Security (还是01字典树)
???? ???? ????题意:给两个数组A,P,P可重新排列,问你两个数组异或得到的最小字典序数组将P插入字典树,1~n遍历A,对每个A贪心即可qwq五一讲课拿这个做板题吧const int MX = 3e5 + 10;int a[MX],p[MX];int tot,son[MX*33][2],cnt[MX*33];void build(int x,int i) { int p=0; ...原创 2020-04-29 15:07:51 · 109 阅读 · 0 评论 -
P2580 于是他错误的点名开始了 (一个板子)
???? ???? ????const int MX = 1e4 + 10;int tot,cnt[MX*55],son[MX*55][55];void build(string x){ int p=0; for(auto c:x) { if(son[p][c-'a']==0) son[p][c-'a']=++tot; p=son[p][c-'a']...原创 2020-04-29 10:02:44 · 177 阅读 · 0 评论 -
CodeForces - 665E Beautiful Subarrays (01字典树,异或)
题意:给你一个数组,问你该数组有多少子区间异或和大于等于k问到区间异或和首先想到前缀和,定义sum[ i ] 为1 ~ i 的异或值对于每个r,查找有多少sum[ i ] & sum[ r ] >=k,首先想到01字典树,从高位像低位贪心。如果该位有异或值大于K的情况,如x=1,k=0,那么先加上cnt[son [ p1 ] ](因为该位已经大于了,后面不用再讨论了),然后让p ...原创 2020-04-29 09:12:26 · 190 阅读 · 0 评论 -
CodeForces - 1084E The Fair Nut and Strings (前缀,字典树)
???????? ???????? ????????看到前缀要第一时间想到字典树。给定两个由 ′a′, ′b′ 组成的字符串 a, b,以及两个整数 n 和 k,n表示字符串 a,b 的长度, 要求你最多 选 k 个 字符串 ti 满足 a<=ti<=b(字典序), 并且使得这些字符串的前缀的数量最大。其实就是给你一个有左右边界且叶子数量必须小于等于 k 个的字典树,最多能有多少个节点,我们枚举每一层能作为答...原创 2020-04-11 14:16:32 · 186 阅读 · 0 评论 -
BZOJ 4260 Codechef REBXOR(01字典树)
???? ???? ????01字典树可以解决异或最值问题,常数复杂度(1)如果只要求一个区间,我们求完前缀和之后只要找到两个前缀和(可以相同)异或值最大即可,问题就变成了ACwing 143,(2)要求两个区间,我们枚举这两个区间的分割点 , dpre[i]表示1~i段子区间异或最大值,即做两次前缀和,然后**对每一个后缀和,找到与他异或最大的后缀和,加上dpre[ i - 1 ]**即可QAQ堪堪卡过...原创 2020-02-17 20:14:23 · 95 阅读 · 0 评论 -
HDU - 5536 Chip Factory (枚举)
???? ???? ????一开始一直在想怎么解决i+j的问题,后来发现数据范围,可以枚举选择的i,j,字典树查询k,查询之前为了保证不会查询到i,j上,我们先把他们删除。#define int llint a[1111];int tot,son[1111*34][2],mp[1111*34];void build(int x,int v){ int p=0; for(int k=31;...原创 2020-02-17 17:41:34 · 85 阅读 · 0 评论 -
HDU - 4099 Revenge of Fibonacci(模拟竖式,精度)
???? ???? ????真不好调,值得注意的一点就是题目说明给出的前缀最多只有四十位,所以我们建立字典树的时候也只取前四十位即可,加和的时候保留60位。int f[2][MAXN];//滚动数组char s[55],n[444];int tot,son[MAXN*43][10];int mp[MAXN*44];void build(int k){ int p=0,len=strlen(s)...原创 2020-02-17 16:42:35 · 84 阅读 · 0 评论 -
AcWing 144. 最长异或值路径 (树上路径转化)
???? ???? ????拿出了以前的链式向前星板子,所以整个代码变得很丑。。#define int llint a[MAXN],tot,son[MAXN*32][2];void build(int x){ int p=0; for(int k=32;k>=0;--k) { int tmp=((x&(1ll<<k))==0?0:1); ...原创 2020-02-17 14:18:17 · 137 阅读 · 0 评论 -
AcWing 143. 最大异或对 (异或性质,Trie)
⛲ ⛲ ⛲刚开始WA了,数组又开小了,,关于字典树大小的问题,考虑如果每一个字符都能生成新结点,那么字典树大小就是MAXN*LEN,本题目中数据是1<<31的范围,算上0位就是32位长度字符串,即MAXN*32;哦对还看到大佬写的是边插入边查询,这点没想到。#define int llint a[MAXN];int tot;int son[MAXN*32][2];void...原创 2020-02-17 13:38:45 · 162 阅读 · 0 评论 -
The 2019 ICPC Asia Shanghai Regional Contest B - Prefix Code(字典树)
???? ???? ????一开始数组开小了,,就判断下当前字符是不是前面字符的前缀和前面字符是不是当前字符的前缀即可int t = 0,son[MAXN][10];map<int,int>mp;bool build_trie(string x){ int l= (int)x.size(), p = 0; int flag=0,flag2=1; for (int i =...原创 2020-02-16 21:34:11 · 155 阅读 · 0 评论