字典树
一种高效的数据结构
为什么他们cf写的这么快
这个作者很懒,什么都没留下…
展开
-
cf282 E. Sausage Maximization(字典树+前缀和)
题目链接题意:给定一个序列a,记pre为a的某段前缀异或和,post为某段后缀异或和。求pre异或post的最大值,但是pre和post不能有重合的部分。思路:把前缀异或和插入字典树,枚举每个后缀异或和,在01字典树里找异或最大值就行。#include<bits/stdc++.h>using namespace std;const int maxn=1e5+5;typedef long long ll;ll tot,ans,a[maxn],tree[maxn*60][2],nu原创 2021-05-13 16:50:42 · 254 阅读 · 0 评论 -
hdu5536 Chip Factory(字典树的插入删除)
题目链接思路:枚举每个a【i】算贡献,进行01字典树取最大异或,但是由于i,j,k要不同,,所以在算a【i】的时候要把a【i】先从字典树上删除掉,不过哦貌似这题暴力也能过。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e3+5;int tree[maxn*32][2],tot,ans=0,a[maxn],num[maxn*32];void insert(int x)原创 2020-05-20 21:37:51 · 109 阅读 · 0 评论 -
洛谷 P4551 最长异或路径(01字典树+dfs)(好题)
题目链接思路:求最大异或我们考虑01字典树,但是在树上怎么建呢?我们考虑一下树上一点u,点u到其他点的最大异或和路径可以通过边dfs边建字典树的方式进行。#include<iostream>#include<cstdio>#include<vector>using namespace std;const int maxn=2e5+5;typedef long long ll;vector<pair<int,int> >g[maxn原创 2020-05-10 20:17:42 · 203 阅读 · 0 评论 -
hdu4825 Xor Sum(01字典树求最大异或)
题目链接Problem DescriptionZeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整数 S ,之后 Zeus 需要在集合当中找出一个正整数 K ,使得 K 与 S 的异或结果最大。Prometheus 为了让 Zeus 看到人类的伟大...原创 2020-03-23 21:39:28 · 86 阅读 · 0 评论 -
Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1) D. Perfect Security(字典树)
题目链接题意:给定两个数组a和b,对于a数组的每一个元素,他都可以找b中的一个元素进行异或,求异或后字典序最小的方案。思路:对b数组建01字典树,然后对于每个a【i】,我们要想字典树最小的话肯定贪心的选和自己的那一位01相同的,实在没有了只能走另外一条了,当b数组的一个元素配对好后,记得要在字典树上把它删掉。#include<bits/stdc++.h>using name...原创 2020-03-23 21:37:18 · 127 阅读 · 0 评论 -
Технокубок 2018 - Отборочный Раунд 1 D. Polycarp's phone book(枚举+字典树)
题目链接思路:因为每个字符串长度都是9,那么我们就暴力去每个字符串每个长度的字串建字典树,然后查询的时候先将第i个字符串的所有长度的字串全部删掉,再查一下字典树中不存在的那个字串就行了,由于长度要最小我们可以按长度从小到大枚举就可以了,最后别忘了恢复原状。#include<bits/stdc++.h>using namespace std;typedef long long...原创 2020-03-23 21:30:19 · 1951 阅读 · 0 评论 -
VK Cup 2015 - Finals, online mirror A. Matching Names(字典树+dfs+贪心)
题目链接思路:我们建字典树的时候存一下当前这个点对应的两个数组a和b的编号,然后把字典树像普通树一样去dfs,我们贪心的选深度深的,因为深度越深就说明两个字符串匹配的越多,每一层的时候可以暴力枚举匹配一样就行。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6...原创 2020-03-23 21:26:33 · 103 阅读 · 0 评论 -
Codeforces Round #482 (Div. 2) D. Kuro and GCD and XOR and SUM(数学+01字典树)(好题)
题目链接题意:有n个操作,操作1代表往集合里面加入一个数字x,操作2会给出三个数字x,k,s,然后对于每一个2操作,题目有一个询问,要求从集合中找一个数vv满足下面的条件:gcd(x,v)%k==0x+v≤s使x⊕v的值最大思路:对于第一个条件我们可以建1e5棵字典树,第i棵字典撒插的就是所有的i的倍数,因为v肯定是k的倍数,所以我们最后查询的时候就在第k棵字典树上查询。那么第二个和...原创 2020-03-23 21:18:11 · 107 阅读 · 0 评论 -
Educational Codeforces Round 12 E. Beautiful Subarrays(区间异或+字典树)
题目链接思路:首先区间异或有一个性质s【l-1】^s【r】=s【l。。。。r】,所以我们考虑异或前缀和,我们从k的每位二进制来考虑,在已经构造好的字典树中,如果k的第pos位是0,那么我们看看当前字典树能不能走相反的方向,能的话就能把这一位异或为1,就会对他们产生贡献,加上经过这条边的个数就行了,如果第pos位是1的话我们最低要求也得保障我们字典树这一位异或起来是1才行,不然如果是0的话就不可...原创 2020-03-23 21:11:58 · 92 阅读 · 0 评论 -
Codeforces Round #613 (Div. 2) D. Dr. Evil Underscores(字典树+贪心)
题意:如题;思路:如果才能使结果最小呢?我们假设我们选择X,把数组中每个数看成2进制(由数据范围知二进制的位数不超过30个,假设在某一位数组中所有的数都是1或者都是0,那么我们是不是肯定可以一起把这个0和1给消掉?如果该位既有0又有1呢?我们显然这一位只能取1(因为你无法消掉),所以结论就是第i位如果全是0或1,则i位是0,否是为1,跑字典树即可。#include<bits/stdc+...原创 2020-01-13 17:09:24 · 134 阅读 · 0 评论