
Trie
文章平均质量分 70
逍遥Fau
为伊蕾娜献上心脏!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU6964 I love counting (树状数组 + 01Trie)
题目链接: I love counting大致题意给定一个长度为nnn的序列, 进行mmm次询问:l r a b 询问[l,r][l, r][l,r]区间有多少种不同的数值ccc, 满足c xor a≤bc \ xor \ a \le bc xor a≤b.解题思路01Trie + 树状数组我们考虑把所有询问离线, 按照rrr从小到大排序.我们考虑到对于排序后的询问: 一旦某个数字同时在iii 和 jjj位置出现(i<j, a原创 2021-10-23 19:06:08 · 151 阅读 · 0 评论 -
HDU6955 Xor sum (01Trie)
题目链接: Xor sum大致题意给定一个长度为nnn的序列, 要求你找到一个区间, 使得区间内的所有数字异或大于等于kkk.如果有多个满足要求的区间, 需要找到最短的区间.如果区间长度相同, 需要输出最靠左的区间.解题思路思维 + 01Trie (这不是典中典?)我们考虑到要求区间异或和, 因此我们不妨处理出前缀异或和, 记为s[]s[]s[].这样, 如果s[r] xor s[l−1]≥ks[r] \ xor \ s[l - 1] \ge ks[r] xor原创 2021-10-20 20:40:40 · 199 阅读 · 0 评论 -
牛客练习赛11 假的字符串 (单词Trie + 拓扑排序)
题目链接: 假的字符串大致题意给定nnn个字符串, 互不相等, 你可以任意指定字符之间的大小关系(即重定义字典序).求有多少个串可能成为字典序最小的串, 并输出它们.解题思路单词Trie + 拓扑排序 (记录给学弟出题, 然后自己被坑到的一次QAQ)比较容易想到的一点就是, 如果某个字符串的前缀字符串出现过, 则该字符串一定不合法.我们很容易想到用Trie来判断.但有一点应当注意, 当我们假设当前字符串字典序最小时, 我们要注意是否字母大小关系有出现环的情况.例如:3aa abb原创 2021-09-30 15:01:46 · 343 阅读 · 0 评论 -
ICPC2018南京网络赛 Set (01Trie的合并)
题目链接: Set大致题意给出n个集合, 初始集合i内有数字aia_iai.有m个操作:1 x y如果axa_xax和aya_yay不在同一个集合, 则把两个数字所在集合合并.2 x 给axa_xax所在的集合中的所有数字加一3 x k c 询问axa_xax所在集合中的所有数字在%2k2^k2k的情况下有多少个和ccc相同.解题思路01Trie我们先考虑查询操作, 我们如何查询若干个数字的后k位数否和一个数字相同呢?我们发现可以用01Trie来维护. 每个节原创 2021-08-05 21:33:42 · 257 阅读 · 0 评论 -
HDU5790 Prefix (主席树 + 单词Trie)
题目链接: Prefix大致题意给出n个字符串, 编号从1~n.每次询问编号在[l, r]区间的所有字符串中, 不同前缀的数目. (强制在线)解题思路思维首先考虑到字符串的总长度为1E5, 因此不同前缀的数量最多为1E5.如果不加以区间的限制, 询问所有的字符串有多少不同的前缀. 则我们可以通过Trie来完成. 我们把字符串插入Trie中, 如果此时我们为当前字符开辟了新节点, 则不同前缀数目+1.考虑区间限制, 如果我们把不同的前缀 修改为 不同的数字(即: 询问[l, r]区间不同数字的原创 2021-08-05 20:11:33 · 91 阅读 · 0 评论 -
POJ3764 The xor-longest Path (01Trie 维护树上路径)
题目链接: The xor-longest Path大致题意给定一棵n个顶点的带权树, 定义树上一条路径的长度为路径上所有边权的异或和, 求树上最长路径的长度。解题思路思维通常树上路径异或的问题, 我们可以进行如下转换: 设顶点a和b, 则dis(a, b) = dis(a, root) xor dis(b, root).设 x = dis(a, root), y = dis(b, root). 则我们需要找出最大的x xor y.01Trie如果我们在Trie中存储dis(vertex,原创 2021-08-05 15:44:02 · 171 阅读 · 0 评论 -
Codeforces282E Sausage Maximization (01Trie)
题目链接: Sausage Maximization大致题意给出长度为n的序列aaa, 你需要选择一个前缀与后缀, 选择的前后缀不能相交, 可以为空.问: 在所有的选择中, 前缀与后缀的所有元素异或结果最大是多少?解题思路01Trie首先考虑一个简化模型, 给出一个序列, 可以选择两个不同位置的数字, 求异或的最大结果.我们可以用01Trie, 通过枚举其中的一个数字来计算出当前最大结果, 最后答案是所有结果取max即可.对于本题: 我们可以把所有前缀存入Trie中, 然后枚举每一个后原创 2021-08-04 20:54:40 · 206 阅读 · 0 评论 -
Codeforces665E Beautiful Subarrays (01Trie)
题目链接: Beautiful Subarrays大致题意给定一个长度为n的序列aaa.问: 有多少个连续的子序列满足其内部所有元素异或的结果大于等于kkk.解题思路思维首先我们考虑对于这种询问区间个数的问题, 我们暴力枚举左右端点的复杂度一定是爆炸的.我们通常会采取一种枚举右端点的方式来优化复杂度.对于本题而言, 我们的做法是: 枚举当右端点为r时, 找出有多少个左端点l符合要求.考虑到异或满足前缀和的性质, 不妨记序列sss为aaa的前缀异或数组. 则我们求[l, r]的异或结果,原创 2021-08-04 17:42:23 · 241 阅读 · 0 评论 -
2019ICPC 上海 B.Prefix Code (字典树)
题目链接: Prefix Code大致题意给定n个数字组成的字符串, 问是否所有的数字都不是其余数字的前缀.解题思路Trie我们可以用字典树来存储所有的数字, 在树中记录所有数字的前缀出现情况.存储后再对每一个数字判断是否该数字只出现过一次即可.感觉牛客机子还是挺玄学的, 理论上每次memset会比手写清空慢, 然而实际上memset快到飞起.AC代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i &l原创 2021-08-04 17:18:59 · 151 阅读 · 0 评论 -
Codeforces633C Spy Syndrome 2 (单词Trie)
题目链接: Spy Syndrome 2大致题意给定一个长度为n的字符串str, 全部由小写字母组成.接下来给出单词列表, 共包含m个单词, 每个单词由大写和小写字母组成.字符串str可以保证是由若干个单词组成, 但是进行了加密.加密操作: 每个单词的所有字母都被转换成小写字母, 并且进行了翻转.要求你复原出str, 并且在单词与单词之间加上空格输出.解题思路本题不推荐看其他用Trie + dfs的题解, 理论上复杂度应该是爆炸了.网上深搜的做法都是把单词翻转存入Trie, 但是我反过来原创 2021-08-03 16:27:45 · 284 阅读 · 0 评论 -
AcWing256 最大异或和 (可持久化01Trie)
题目链接: 最大异或和解题思路重点放在, 在区间[l, r]找到一个位置p, 使得从p位置开始, 异或到序列结束, 再异或上x, 结果最大. 如果这样考虑, 对于每一个位置p, 我都需要算一次区间[p, n]的异或结果. 明显这是很慢的一步操作.优化: 使用前缀和. 由异或的性质, 我们可知 x ^ x == 0, 既然这样, 我们可以对于整个序列求出"前缀和", 记为s数组.这样如果再计算[p, n]的异或结果, 我就可以运用前缀和的性质得到等式 res[p, n] = s[n] ^ s[p -原创 2020-11-05 00:51:39 · 371 阅读 · 0 评论