字典树
Ray.C.L
不开longlong见祖宗
展开
-
Perfect Security(01字典树)
题目链接 题意:给你两个序列A,B,求一个序列C c[i]=a[i]^b[i]你可以重新排列B序列,且要答案字典序最小。 思路:对B序列建树,然后在A序列查找,为了找到数尽可能小,那么贪心的时候就是看01树上的点和有没有和当前位一样的有的话就选他,异或后对答案没影响,没有的话就只能加上当前位异或值(1<<i),还要删除字典树的节点,我们用sum[i]记录一想当前节点还有几个子节点可以走,当子节点减为0时则不能走。 //#pragma GCC optimize(2) #include<bit原创 2020-11-05 23:06:18 · 241 阅读 · 0 评论 -
NC 112209 Vitya and Strange Lesson(01字典树)
题意:给你n个数的序列m个操作,每次操作给你一个数,然后让序列中所有的数异或这个数最后求当前序列的mex(最小未出现的非负值) 思路:异或有结合律那么我们就把后面输入的数异或一下,然在n 个数上的字典树去找没出现的值,我们去记录一下当前树的节点,看他是不是满二叉树,如果是满的那说明在这条路径上没有未出现的数,我们就跳到另一边,然后此时当前位只能为1所以加上1<<i //#pragma GCC optimize(2) #include<bits/stdc++.h> using n.原创 2020-11-04 21:31:01 · 212 阅读 · 0 评论 -
奶牛异或(01字典树)
思路:区间异或的值用前缀和的思想,x^ x2…^xn是1——n的异或值 x…x2n是1——2n的异或值或者这两个数异或一下就是n——2n的异或值,那么求奶牛区间异或值最大,我们就可以吧前缀异或值建树,从中找2个异或值最大的就是要的答案,为了保证最短并且等级最高,我们从前往后每次进来一个数先求树中最大的异或值然后再把他加进去。为了记录位置,我们再sum[root]里面记录数的位置。 //#pragma GCC optimize(2) #include<bits/stdc++.h> using.原创 2020-10-28 20:57:10 · 222 阅读 · 0 评论 -
Trie字符串统计(字典树查询字符串出现次数)
思路:字典树 #include <iostream> #include <algorithm> #include <cstdio> #include <set> #include <sstream> #include<string> #include<queue> #include<stack> #...原创 2020-04-04 17:35:00 · 415 阅读 · 0 评论 -
最大异或对(01字典树)
思路:01字典树 #include <iostream> #include <algorithm> #include <cstdio> #include <set> #include <sstream> #include<string> #include<queue> #include<stack> ...原创 2020-04-01 10:09:52 · 310 阅读 · 0 评论 -
HDU-4825 Xor Sum(01字典树)
思路:转化为01字典树贪心找他每一位异或为1的,那么最后找到就是最大的数。 #include <iostream> #include <algorithm> #include <cstdio> #include <set> #include <sstream> #include<string> #include<que...原创 2020-03-30 19:08:48 · 161 阅读 · 0 评论 -
统计难题HDUOJ-1251(字典树统计前缀次数)
思路:字典树模板题 #include <iostream> #include <algorithm> #include <cstdio> #include <set> #include <sstream> #include<string> #include<queue> #include<stack>...原创 2020-03-02 16:23:28 · 159 阅读 · 0 评论