随笔分类 - ICPC-数据结构
摘要:题目链接 题意 : 给出一颗最多有 1e5 个节点的树、其中叶子节点不超过 20 个、每个节点都拥有一种颜色、问你这颗树上有多少种不同的路径使得其路径连起来的颜色串是不一样的。 分析 : 这题实际上就是问树上有多少种不同的子串 首先有一个很神奇的性质 所有的子串都会在以某个叶子节点为根的树上以一条直
阅读全文
摘要:后缀自动机能解决很多单串的问题、但是一旦到了多串的情况、可能就会变得有些棘手 这个时候你可能会想能不能将多个串一起构建出和单串后缀自动机那样子拥有诸多优美性质的自动机呢? 答案当然是有的、那就是广义后缀自动机 对于广义后缀自动机、和普通的后缀自动机写法上有些许不同之处 大致就是在插入新串的时候、需要
阅读全文
摘要:题目链接 题意 : 中文题 分析 : 首先引入两篇写的很好的题解 题解一、题解二 听说这种和异或相关区间求和的问题都尽量按位考虑 首先第一问、按二进制位计贡献的话、那么对于第 k 位而言 其贡献 = 区间异或和第 k 位为 1 的子区间个数 * 2^k 而能产生贡献的子区间必定满足 xorSum(R
阅读全文
摘要:题目链接 题意 : 给你一个串、要你将其划分成两个串、使得左边的串的本质不同回文子串的个数是右边串的两倍、对于每一个这样子的划分、其对答案的贡献就是左边串的长度、现在要你找出所有这样子的划分、并将贡献乘起来、答案 mod 1e9+7 分析 : 从左到右跑一边回文自动机、对于每个前缀 能够得出其有多少
阅读全文
摘要:题目链接 分析 : 这道题对于单个串的用 SAM 然后想想怎么维护就行了 但是多个串下、可以先将所有的串用一个不在字符集( 这道题的字符集是 '0' ~ '9' ) 链接起来、建立后缀自动机之后 在统计答案的时候直接忽略掉不合法的边集的状态转移即可 #include<bits/stdc++.h> #
阅读全文
摘要:参考博客 I、参考博客 II 学习参考 hihocoder struct SAM { static const int MAXN = ((int)1e6 + 10)<<1;///大小为字符串长度两倍 static const int LetterSize = 26;///字符集大小 int tot;
阅读全文
摘要:题目链接 题意 : 实际上可以转化一下题意 要求求出用三个不同元素的字符集例如 { 'A' 、'B' 、'C' } 构造出长度为 n 且不包含 AAA、BBB CCC、ACB BCA、CAC CBC 这其中任意一个字符串的方案数 分析 : 方法一 (BM 求线性递推) 直接暴力出前 10 项的答案、
阅读全文
摘要:题目链接 题意 : 给出一个由数字组成的字符串、然后要你找出其所有本质不同的回文子串、然后将这些回文子串转化为整数后相加、问你最后的结果是多少、答案模 1e9+7 分析 : 应该可以算是回文树挺裸的题目吧 可惜网络赛的时候不会啊、看着马拉车想半天、卒... 对于每一个节点、记录其转化为整数之后的值
阅读全文
摘要:const int maxn = 400000; const int N = 26 ; struct Palindromic_Tree { int next[maxn][N] ;//next指针,next指针和字典树类似,指向的串为当前串两端加上同一个字符构成 int fail[maxn] ;//f
阅读全文
摘要:题目链接 题意 : 给你一棵树、树上的每个点都有点权、之后有若干次问询、每次问询给出一个节点编号以及一个整数 X 、问你以给出节点为根的子树中哪个节点和 X 异或最大、输出这个值 分析 : 看到这种树上异或最值的问题 可以考虑使用 Trie 来解决 首先涉及到子树 我们可以利用 DFS 序来构造出每
阅读全文
摘要:题目链接 题意 : 给出一个 n 个元素的环、可以任意选择起点、选完起点后、可以行走 m 步、每次前进 k 个单位、所走到的点将产生正或负贡献、问你一开始得准备多少才能使得初始资金加上在环上获取最大利益不少于给定的 s 分析 : 对于一个环、固定步数下是有循环节的 不同循环节内的节点各不相同 根据裴
阅读全文
摘要:题目链接 题意 : 给出一个哈希表、其避免冲突的方法是线性探测再散列、现在问你给出的哈希表是否合法、如果合法则输出所有元素插入的顺序、如果有多解则输出字典序最小的那一个、如果不合法则输出 -1 分析 : 经过对样例的模拟和观察、可以发现 如果一个元素 A 本应去到的位置 pos 被元素 B 占据、则
阅读全文
摘要:题目链接 题意 : 中文题、点链接 分析 : 直接建 Trie 图、在每一个串的末尾节点记录其整串长度、方便删串操作 然后对于问询串、由于可能有删串操作 所以在跑 Trie 图的过程当中需要拿个栈记录一下路径 跑 Trie 图的意思就是说将问询串字符一个个拿出来 然后一直找当前节点的下一个对应字母的
阅读全文
摘要:题目链接 题意 : 给出 n 个串、然后给出一个问询串、问你对于问询串的每一个前缀、需要至少补充多少单词才能使得其后缀包含 n 个串中的其中一个、注意 '-' 字符代表退格 分析 : 多串的匹配问询自然想到 AC 自动机 或者 构建 Trie 图 首先将 N 个串丢到 Trie 图里面 对于每一个节
阅读全文
摘要:题意 : 给出 N 个数、然后 M 个问询、问询格式是给出 ( L、R ) 然后需要根据规则变成新的 ( L'、R' ) [ 即此题强制在线了 ]、对于每个问询假设问询区间内有 X 个不同种类的数、每个数从左到右第一次出现的位置是 pos1、pos2... posX 然后要你给出 pos( (X+1
阅读全文
摘要:主席树是一种可持久化线段树、其发明者orz 黄嘉泰 拼音缩写与某届主席一样、于是这个数据结构被戏称为主席树。 所谓的“持久化数据结构”、就是保存这个数据结构的所有历史版本、同时利用它们之间的共用数据减少时间和空间的消耗。 由于线段树在区间长度固定的情况下结构都是一致的、主席树能够通过两颗线段树相减来
阅读全文
摘要:如果你了解过 01 Trie 和 可持久化线段树(例如 : 主席树 )、那么就比较好去可持久化 Trie 可持久化 Trie 当 01 Trie 用的时候能很方便解决一些原本 01 Trie 不能解决的一些问题 01 Trie 的经典贪心算法可以在一个数集里面找出某个数和 X 异或的最值 但若数集不
阅读全文
摘要:题意 : 给定一个区间长度 n ,接下来给出 m 个子区间,要求最少选出多少个区间才能使得 1~n 这个区间被所选的所有子区间覆盖 分析 : 暴力枚举所有可能的组合可以达到 O( m^m ) ,完全不行 这里考虑动态规划解法 定义 dp[i][j] : 到第 i 个为止,完全覆盖点(即从 1~这个点
阅读全文
摘要:题意 : 在二维平面上给出 N 个矩形,问你所有矩形构成的图案的面积是多少(相互覆盖的地方只计算一次) 分析 : 求矩形面积并可以模拟来做,不过使用线段树来辅助做扫描线可以更高效地求解 扫描线顾名思义就是类似有一条线在二维平面上扫过去,将矩形面积并给扫出来 实现是使用线段树来模拟这个扫描的过程 第一
阅读全文
摘要:题意 : 给出一个含有 N 个数的序列,然后有 M 次问询,每次问询包含 ( L, R, K ) 要求你给出 L 到 R 这个区间的第 K 大是几 分析 : 求取区间 K 大值是个经典的问题,可以使用的方法有很多,我听过的只有主席树、整体二分法、划分树、分块…… 因为是看《挑战》书介绍的平方分割方法
阅读全文