数据结构
.
执著者√
!
展开
-
最大异或和(可持久化Trie)
给定一个非负整数序列 a,初始长度为 N。 有 M 个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N 增大 1。 Q l r x:询问操作,你需要找到一个位置 p,满足 l≤p≤r,使得:a[p] xor a[p+1] xor … xor a[N] xor x 最大,输出这个最大值。 输入格式 第一行包含两个整数 N,M,含义如问题描述所示。 第二行包含 N 个非负整数,表示初始的序列 A。 接下来 M 行,每行描述一个操作,格式如题面所述。 输出格式 每个询原创 2021-07-20 11:40:26 · 423 阅读 · 0 评论 -
最长异或值路径(Trie)
给定一个树,树上的边都具有权值。 树中一条路径的异或长度被定义为路径上所有边的权值的异或和: 给定上述的具有 n 个节点的树,你能找到异或长度最大的路径吗? 输入格式 第一行包含整数 n,表示树的节点数目。 接下来 n−1 行,每行包括三个整数 u,v,w,表示节点 u 和节点 v 之间有一条边权重为 w。 输出格式 输出一个整数,表示异或长度最大的路径的最大异或和。 数据范围 1≤n≤100000, 0≤u,v<n, 0≤w<2^31 输入样例: 4 0 1 3 1 2 4 1 3 6 输出原创 2021-07-19 23:41:37 · 344 阅读 · 0 评论 -
电话列表(Trie)
给出一个电话列表,如果列表中存在其中一个号码是另一个号码的前缀这一情况,那么就称这个电话列表是不兼容的。 假设电话列表如下: Emergency 911 Alice 97 625 999 Bob 91 12 54 26 在此例中,报警电话号码(911)为 Bob 电话号码(91 12 54 26)的前缀,所以该列表不兼容。 输入格式 第一行输入整数 t,表示测试用例数量。 对于每个测试用例,第一行输入整数 n,表示电话号码数量。 接下来 n 行,每行输入一个电话号码,号码内数字之间无空格,电话号码不超过原创 2021-07-19 15:57:20 · 129 阅读 · 0 评论 -
前缀统计(Trie)
给定 N 个字符串 S1,S2…SN,接下来进行 M 次询问,每次询问给定一个字符串 T,求 S1∼SN 中有多少个字符串是 T 的前缀。 输入字符串的总长度不超过 106,仅包含小写字母。 输入格式 第一行输入两个整数 N,M。 接下来 N 行每行输入一个字符串 Si。 接下来 M 行每行一个字符串 T 用以询问。 输出格式 对于每个询问,输出一个整数表示答案。 每个答案占一行。 输入样例: 3 2 ab bc abc abc efg 输出样例: 2 0 算法: 可以用字典树来存储所有的单词,在每一个查询原创 2021-07-19 15:10:03 · 293 阅读 · 0 评论 -
最大异或对(Trie、贪心)
在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少? 输入格式 第一行输入一个整数 N。 第二行输入 N 个整数 A1~AN。 输出格式 输出一个整数表示答案。 数据范围 1≤N≤10^5, 0≤Ai<2^31 输入样例: 3 1 2 3 输出样例: 3 算法: 异或运算:相同为0,相异为1; Ai是范围可以用二进制表示,像11000…1(31位),可以用Trie存储所有的树 寻找和Ai异或最大的数Aj,如果Ai第30位的1,那么Aj第30位要往不一样原创 2021-07-19 14:51:07 · 211 阅读 · 0 评论 -
Trie字符串统计(模板题)
维护一个字符串集合,支持两种操作: 1、I x 向集合中插入一个字符串 x; 2、Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。 输入格式 第一行包含整数 N,表示操作数。 接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一种。 输出格式 对于每个询问指令 Q x,都要输出一个整数作为结果,表示 x 在集合中出现的次数。 每个结果占一行。 数据范围 1≤N≤2∗104 输入样例: 5 I abc Q abc原创 2021-07-19 14:08:14 · 212 阅读 · 0 评论