Trie字典树
文章平均质量分 60
字符串---字典树
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
算法竞赛进阶指南---0x18(Trie)Phone List
题面题解我们可以用字典树来查询串中是否出现前缀,对于每个字符串,我们先判断其是不是前面字符串的前缀,或者前面字符串是不是它的前缀,然后再插入即可我们可以将每个字符串的结尾标记,那么每次query的时候,如果当前字符串在原字典树中全部出现,那么这个字符串就是某个字符串的前缀,如果当前字符串从根节点开始向下查询时有一个节点的cnt>0,说明当前这个字符串有前缀存在于字典树中。代码#include<iostream>#include<cstdio>#i原创 2021-02-26 20:09:32 · 1441 阅读 · 3 评论 -
算法竞赛进阶指南---0x16(Trie) The xor-longest Path
题面输入样例40 1 31 2 41 3 6输出样例7题解如图,给定一颗树(不一定是二叉树),树中每条边都有对应的权值,任意两个点都是能互相到达的,让我们找两个点路径异或和最大,现在一看到异或和最大就想到了Trie,哈哈哈 ,看图,任取两个点a,b 对于ab两点之间的路径异或和我们可以分成两部分,就是他们分别到根节点路径和(图中蓝红两部分),然后将这两部分异或,就可以得到结果那么如何找两点的最大呢,对于图中的树,我们可以用 dfs 算出所有点到根节点路径的异或和原创 2021-02-15 22:44:40 · 135 阅读 · 3 评论 -
usaco training 6.1 奶牛异或 (字典树)
题面输入样例510542输出样例6 4 5题解区间异或找最大,一看就是01字典树的变型,我们的板子点这里是找两个数的最大异或,此题是让找一个区间的异或和,那么我们就可以用前缀和的思想去做用s数组表示前i个数的异或,s[l-1]^s[r] = al ^ al+1 ^ al+2 ^ … ^ar ,这样就可以求出任意一段连续区间的异或了条件是让满足区间异或最大而且让r尽可能的小,那么我们就从左向右遍历,每次右端点增加一位(也就是区间长度+1),看在这个区间的最大异或是多少原创 2021-02-15 12:54:42 · 250 阅读 · 0 评论 -
算法竞赛进阶指南---0x16 (Trie) 前缀统计
题面原创 2021-02-01 11:07:22 · 145 阅读 · 0 评论 -
算法竞赛进阶指南---0x16(Trie) 最大异或对
题面题解首先我们肯定是想暴力枚举,然后去一个最大的即可,但是数据范围1e5 O(n2)肯定会超时,C中1秒最多可以跑1e7-1e8for (int i = 1; i <= n; i++) { //枚举第一个数 for (int j = 1; j < i; j++) { //枚举第二个数 res = max(res, a[i] ^ a[j]); } }我们继续考虑,给定一个数,如何使这个数异或一个数最大,原创 2021-02-03 23:27:15 · 201 阅读 · 0 评论 -
算法竞赛进阶指南---0x48(可持久化数据结构) 最大异或和
题面题解此题是在最大异或对的基础上进行进一步扩展,用到了可持久化Trie对于题中所给条件,我们做进一步转化,我们可以用前缀和数组,s0=0, s1=a1,s2=a1 ^ a2 , s3 = a1^ a2^a3 …这样,对于ap ^ … ^ an ^ x = s p-1 ^ sn ^ x ,那么对于区间[l,r] 的查询 ,就变成了 [sl-1,r-1] ^ sn ^x 最大了找异或最大,有没有之前的Trie异或对的做题思路,比如0101 异或多少能最大呢 答案肯定是每一位的对立,就是10原创 2021-02-05 19:05:45 · 588 阅读 · 0 评论