摘要: 题目大意:求可重叠的相同子串数量至少是K的子串最长长度 洛谷传送门 依然是后缀数组+二分,先用后缀数组处理出height 每次二分出一个长度x,然后去验证,在排序的后缀串集合里,有没有连续数量多于K个串的长度>=x, 但据说有一种高端做法是把二分换成单调队列,能减少常数,可惜我并没有看懂...... 阅读全文
posted @ 2018-09-24 22:51 guapisolo 阅读(145) 评论(0) 推荐(0)
摘要: 洛谷P2743传送门 题目大意:给你一个序列,求其中最长的一对相似等长子串 一对合法的相似子串被定义为: 1.任意一个子串长度都大于等于5 2.不能有重叠部分 3.其中一个子串可以在全部+/-某个值后和另一个串完全相同 还是老套路了,其实只要求出每一项和前一项的差值序列,这样第三个问题可以被转化为求 阅读全文
posted @ 2018-09-24 22:50 guapisolo 阅读(143) 评论(0) 推荐(0)
摘要: 题目大意:略 由于字符集大,要用map维护Trie树 并不能用AC自动机的Trie图优化,不然内存会炸 所以我用AC自动机暴跳fail水过的 显然根据喵星人建AC自动机是不行的,所以要根据问题建 然而这题有一些很艮的地方: 1.如果一个喵的名和姓都被点到,那他只被点到了一次 2.询问的串可能相同 3 阅读全文
posted @ 2018-09-24 22:49 guapisolo 阅读(178) 评论(0) 推荐(0)
摘要: 题目大意:给你一堆字符串,一个串不合法的条件是这些字符串中任意一个是这个串的子串,求合法的串的数量 其实这道题比 [HNOI2008]GT考试 那道题好写一些,但道理是一样的 只不过这道题的答案可以转化为 所有可能的字符串(26^m)数量 - 不合法的字符串数量 定义f[i][j]表示匹配到了第i个 阅读全文
posted @ 2018-09-24 22:47 guapisolo 阅读(172) 评论(0) 推荐(0)
摘要: 恢复内容开始 题目大意:给定一个由数字构成的字符串A(len<=20),让你选择一个长度为n(n是给定的)字符串X,一个合法的字符串X被定义为,字符串X中不存在任何一段子串与A完全相同,求互不相同的合法的字符串L的数量 第一眼看就没啥思路....瞅了一眼题解,是KMP优化DP,然后再用矩阵优化DP 阅读全文
posted @ 2018-09-24 22:46 guapisolo 阅读(202) 评论(0) 推荐(0)
摘要: 题目大意:略(太长了不好描述) 良心LOJ传送门 先对所有被打印的字符串建一颗Trie树 观察数据范围,并不能每次打印都从头到尾暴力建树,而是每遍历到一个字符就在Trie上插入这个字符,然后记录每次打印后字符串最后一个字符在Trie树上的位置 然后建立AC自动机,再建立Fail树。注意还要另外存一下 阅读全文
posted @ 2018-09-24 22:44 guapisolo 阅读(173) 评论(0) 推荐(0)
摘要: 题目大意:两个人从2~n中随意取几个数(不取也算作一种方案),被一个人取过的数不能被另一个人再取。两个人合法的取法是,其中一个人取的任何数必须与另一个人取的每一个数都互质,求所有合法的方案数 (数据范围毕竟很小,乍一看也不是啥打表找规律的题) 和我之前做过的一道题很类似hdu 6125,但这道题由于 阅读全文
posted @ 2018-09-24 22:43 guapisolo 阅读(180) 评论(0) 推荐(0)
摘要: 题目大意:太长了,略 Kruskal重构树,很神奇的一个算法吧 如果两个并查集被某种条件合并,那么这个条件作为一个新的节点连接两个并查集 那么在接下来的提问中,如果某个点合法,它的所有子节点也都合法,即子节点的限制少于父节点 阅读全文
posted @ 2018-09-24 22:42 guapisolo 阅读(181) 评论(0) 推荐(0)
摘要: NTT裸模板,没什么好解释的 这种高深算法其实也没那么必要知道原理 阅读全文
posted @ 2018-09-24 22:41 guapisolo 阅读(366) 评论(0) 推荐(0)
摘要: FFT模板,原理不难,优质讲解很多,但证明很难看太不懂 这模板题在bzoj竟然是土豪题,服了 阅读全文
posted @ 2018-09-24 22:40 guapisolo 阅读(163) 评论(0) 推荐(0)
摘要: 洛谷P4299传送门 题目大意:给你一颗树,边是一条一条连上去的 在连接过程中会存在询问,询问当前节点所在联通块(其实是一颗树)的重心是哪个节点 以及森林中所有树的重心的异或和 在做这道题之前,要先了解树的重心的一个性质: 两棵树合并时,新树的重心在合并后,原来两颗树的重心的两个节点构成的那条链上 阅读全文
posted @ 2018-09-24 22:39 guapisolo 阅读(187) 评论(0) 推荐(0)
摘要: 题目大意:给你一棵树,树的边是一条一条连上去的 洛谷P4219传送门 LOJ#2230传送门 在连边的过程中询问某条边的“负载”,即能通过这条边的所有不同的路径的数量 LCT动态维护当前节点的子树大小 size记录该节点的虚子树的大小之和,sum记录该节点为根节点的子树大小 更换虚子节点时,或者连上 阅读全文
posted @ 2018-09-24 22:38 guapisolo 阅读(201) 评论(0) 推荐(0)
摘要: 题目大意:维护一个森林,支持边的断,连,修改某个点的权值,求树链所有点点权的异或和 洛谷P3690传送门 搞了一个下午终于明白了LCT的原理 阅读全文
posted @ 2018-09-24 22:37 guapisolo 阅读(139) 评论(0) 推荐(0)
摘要: 题目大意:维护一个森林,支持边的断,连,以及查询连通性 LCT裸题 洛谷P2147传送门 1A了,给自己鼓鼓掌 1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 #define il inline 5 #define 阅读全文
posted @ 2018-09-24 22:37 guapisolo 阅读(149) 评论(0) 推荐(0)
摘要: 题目大意:给你一棵树,让你维护一个数据结构,支持 边的断,连 树链上所有点点权加上某个值 树链上所有点点权乘上某个值 求树链所有点点权和 (辣鸡bzoj又是土豪题,洛谷P1501传送门) LCT裸题,下传标记,搞法类似于洛谷线段树模板2 先下传乘法标记,val,sum,乘法标记,加法标记都要乘 再下 阅读全文
posted @ 2018-09-24 22:36 guapisolo 阅读(254) 评论(0) 推荐(0)
摘要: 题目大意:略 调了好久终于过了! 我犯了一个错误,虽然我记得在翻转pushdown的时候交换lx和rx 但我应该翻转的是左儿子和右儿子的lx和rx!而不是当前节点的lx和rx 因为pushup的时候是根据左右儿子的lx和rx更新的! 还有就是在find的时候下传标记,在转到根的时候pushup 很丧 阅读全文
posted @ 2018-09-24 22:35 guapisolo 阅读(155) 评论(0) 推荐(0)
摘要: 队列维护下凸包裸题 式子不太好推,但其实不用把式子全展开的..... k单调递增,x单调递增,队列维护一下就行了 因为f[i]期望最小值,所以维护下凸包 好像记录一下凸包的坐标能减少常数 阅读全文
posted @ 2018-09-24 22:34 guapisolo 阅读(147) 评论(0) 推荐(0)
摘要: 动态树有些类似 树链剖分+并查集 的思想,是用splay维护的 lct的根是动态的,"轻重链"也是动态的,所以并没有真正的轻重链 动态树的操作核心是把你要把 修改/询问/... 等等一系列的操作的树链放到一个splay里,然后用splay根据相对深度大小来维护这个树链 lct利用了splay的神奇性 阅读全文
posted @ 2018-09-24 22:34 guapisolo 阅读(157) 评论(0) 推荐(0)
摘要: 我犯了sb错误然后调了1个小时......队列写错了 斜率k递增,b取最小值,队列维护凸包即可 f[0]的预处理好像有些奇怪???我把inf调大就过了??? 阅读全文
posted @ 2018-09-24 22:33 guapisolo 阅读(132) 评论(0) 推荐(0)
摘要: 斜率优化DP裸题,DP方程很简单就不给了 优化一下,整理式子成y=kx+b的形式 发现x单调递增,斜率k单调递减,用一个队列维护凸包就行啦 f[i]和b成正比,而f[i]期望最大值,所以维护上凸包 阅读全文
posted @ 2018-09-24 22:32 guapisolo 阅读(143) 评论(0) 推荐(0)
摘要: 题目大意:有n牧场排成一行,标号从1~n,每个牧场都可以放一个控制站,在第i个牧场放控制站需要花费a[i],控制站能够控制从它开始一直到它左边最靠近它的控制站之间的所有牧场,每个牧场放养量是b[i],这个牧场被它右侧离它最近控制站控制所需要支出的花费是它到牧场的距离d*b[j],在保证所有牧场都被控 阅读全文
posted @ 2018-09-24 22:31 guapisolo 阅读(153) 评论(0) 推荐(0)
摘要: 题目大意:给你一棵树,支持一下三种操作 1.获取某节点到根节点的路径上所有节点的权值和 2.更换某棵子树的父亲 3.某子树内所有节点的权值都增加一个值w 当时想到了splay维护dfs序,查完题解发现思路是对的,然后我就写了足足6个小时才A st[x]代表入栈时间,ed[x]代表出栈时间 对于第一个 阅读全文
posted @ 2018-09-24 22:30 guapisolo 阅读(183) 评论(0) 推荐(0)
摘要: 题目大意:有n个任务,有起始时间si和结束时间ei,以及该任务重要度pi,求某时刻xi正在进行的任务中,重要度前ki小任务的重要度之和 本以为是一道主席树的水题,可我调了半个多小时才调出来,原来是我新建的主席树根的左右儿子并没继承上个版本,导致某些时刻并没有任何刚开始或刚结束的任务,而在这个时间却找 阅读全文
posted @ 2018-09-24 22:29 guapisolo 阅读(150) 评论(0) 推荐(0)
摘要: 题目大意:给你一个序列,求某个区间出现次数大于一半的数是什么 主席树裸题,刷刷水题提升自信= = 阅读全文
posted @ 2018-09-24 22:28 guapisolo 阅读(115) 评论(0) 推荐(0)
摘要: 题目大意:维护一个字符串,支持插入字符和替换字符的操作,以及查询该字符串两个后缀的最长公共前缀长度 乍一看以为是后缀数组,然而并没有可持久化后缀数组(雾) 看题解才知道这是一道splay题,首先要对splay维护区间信息有一定了解 splay维护,插入字符,替换字符 而它的字树内所有儿子的中序遍历的 阅读全文
posted @ 2018-09-24 22:28 guapisolo 阅读(181) 评论(0) 推荐(0)
摘要: 题目大意:让你维护一个数x(x位数<=3*1e7),要支持加/减a*2^b,以及查询x的第i位在二进制下是0还是1 作为一道noi的题,非常考验写代码综合能力,敲+调+借鉴神犇的代码 3个多小时才过... 思路并不难,题目里b<=30n暗示压位,每次压30位可过 先分析一下加法,加a*2^b相当于在 阅读全文
posted @ 2018-09-24 22:27 guapisolo 阅读(148) 评论(0) 推荐(0)
摘要: 题目大意:给你一棵树,树上一共n个节点,共m次操作,每次操作给一条链上的所有节点分配一个权值,求所有节点被分配到所有的权值里,出现次数最多的权值是多少,如果出现次数相同就输出最小的。 (我辣鸡bzoj的权限号,洛谷上P4556也有这道题) 线段树合并入门题 也是比较常规的树上链的点差分 每次操作都在 阅读全文
posted @ 2018-09-24 22:26 guapisolo 阅读(214) 评论(0) 推荐(0)
摘要: 题目大意:给你一个序列,求出指定区间的(l<=i<=r) mod 1000777 的值 还复习了欧拉函数以及线性筛逆元 考虑欧拉函数的的性质,(l<=i<=r),等价于 (p[j]是区间内所有出现过的质数) 那么考虑找出区间内所有出现过的质数,这思路和HH的项链是不是很像?? 由于此题强制在线,所以 阅读全文
posted @ 2018-09-24 22:26 guapisolo 阅读(238) 评论(0) 推荐(0)
摘要: 题目大意:给你一个序列,求某区间出现不同的数的个数。 貌似离线树状数组是最好的解法 先把所有询问挂在它们询问的右端点上 然后从头到尾遍历这个序列,记录这个位置的值上一次出现的位置 那么,当遍历到第i位时,如果a[i]在之前出现过,就在它上一次出现的位置-1 这个操作的意义是,第i位已经有a[i]了, 阅读全文
posted @ 2018-09-24 22:25 guapisolo 阅读(160) 评论(0) 推荐(0)
摘要: 题目大意:给你一棵树,每个点都有点权 有3种操作,修改某节点的权值,求树链上节点的权值的最大值,求树链上节点的权值和 树剖裸题,搜一个树链剖分序,用线段树维护一下即可,总时间 阅读全文
posted @ 2018-09-24 22:24 guapisolo 阅读(214) 评论(0) 推荐(0)
摘要: 题目大意:略 splay维护区间翻转裸题,为了减少不必要的麻烦,多插入两个点,分别是0和n+1 每次找区间的第K个值,就在splay上二分即可 顺便学了一下splay的完美建树,而且splay有一些小函数可以宏定义或者用inline,跑得飞快 最后跑一遍中序遍历即可 阅读全文
posted @ 2018-09-24 22:23 guapisolo 阅读(299) 评论(0) 推荐(0)
摘要: 扫描线裸题没什么好说的 注意空间不要开小了!!! 阅读全文
posted @ 2018-09-24 22:22 guapisolo 阅读(398) 评论(0) 推荐(0)
摘要: 依然是扫描线,只不过是求所有矩形覆盖之后形成的图形的周长。 容易发现,扫描线中的某一条横边对答案的贡献。 其实就是 加上/去掉这条边之前的答案 和 加上/去掉这条边之后的答案 之差的绝对值 然后横着竖着都做一遍就行了 阅读全文
posted @ 2018-09-24 22:22 guapisolo 阅读(178) 评论(0) 推荐(0)
摘要: 题目大意:给你一个N*N的棋盘,棋盘上每个点都有一个权值 第一问求一个权值形成的最大联通块中点的数量 第一问求两个权值共同形成的最大联通块中点的数量 提供一种并查集的做法:(感谢大佬们的题解)第一问把所有相同权值的相邻的点用带权并查集合并一下就OK了 第二问,就需要一些骚操作了 我们的目的是把两个不 阅读全文
posted @ 2018-09-24 22:21 guapisolo 阅读(429) 评论(0) 推荐(0)
摘要: 题目大意:给你一颗树,树上每个点都有一个观察员,他们仅会在 w[i] 时刻出现,观察正在跑步的玩家 一共有m个玩家,他们分别从节点 s[i] 同时出发,以每秒跑一条边的速度,沿着到 t[i] 的唯一路径向节点t[i]奔跑 如果一名玩家已经到达了终点,那么在他到达终点之后出现在终点的观察员不会观察到他 阅读全文
posted @ 2018-09-24 22:20 guapisolo 阅读(288) 评论(0) 推荐(0)
摘要: 恢复内容开始 题目大意:类似于华容道游戏,但所有棋子都是11大小的,棋盘上仅有一个空格,其它位置填满了棋子,有些棋子是固定的不能被移动,每个格子内只能有一个棋子,棋子只能移动到相邻的空格上,每移动任意棋子一次视为一次操作,求让指定棋子移动到指定位置的最小操作数 据说爆搜能拿70pts.... 观察爆 阅读全文
posted @ 2018-09-24 22:19 guapisolo 阅读(366) 评论(0) 推荐(0)
摘要: 恢复内容开始 题目大意:给你一颗树,你可以把其中一条边的边权改成0,使给定的一些树链的权值和的最大值最小 把lenth定义为未修改边权时的答案 考虑二分答案,如果二分的答案成立,设修改成0的边边权为k,那么所有原链长>mid的链都要被这条边影响,显然这些链存在边权为k的公共边 那么我们二分出一个答案 阅读全文
posted @ 2018-09-24 22:17 guapisolo 阅读(301) 评论(0) 推荐(0)
摘要: 题目大意: 给出一个长度为n的序列,构造出一个序列使得它们的位与和为0,求方案数 也就是从序列里面选出一个非空子集使这些数按位与起来为0. 看了好久才明白题解在干嘛,我们先要表示出两两组合位与和为0的所有情况 先hx一下每个数出现的次数,然后我们从遍历 i ,i 是二进制的数位 然后遍历所有的情况, 阅读全文
posted @ 2018-09-24 22:14 guapisolo 阅读(402) 评论(0) 推荐(0)
摘要: 题目大意:甲和乙玩游戏,甲给出n(n<=50)个等长的字符串(len<=20),然后甲选出其中一个字符串,乙随机询问该字符串某一位的字符(不会重复询问一个位置),求乙能确定该串是哪个字符串的询问次数的期望值 这题不看题解好难想......(感谢zhx和zhx两位大佬的题解) len很小,考虑状压DP 阅读全文
posted @ 2018-09-24 22:13 guapisolo 阅读(269) 评论(0) 推荐(0)
摘要: 题目大意:让你在1~n中选择不多于k个数(n,k<=500),保证它们的乘积不能被平方数整除。求选择的方案数 因为质数的平方在500以内的只有8个,所以我们考虑状压 先找出在n以内所有平方数小于等于n的质数,然后我们把它们作为状压的状态 然后要对每个小于n数进行状压,如果它不能被它能被质数的平方整除 阅读全文
posted @ 2018-09-24 22:13 guapisolo 阅读(211) 评论(0) 推荐(0)
摘要: 题目大意:给你一个序列,你可以在序列中任选一个子序列,求子序列每一项的积是一个平方数的方案数。 1<=a[i]<=70 因为任何一个大于2的数都可以表示成几个质数的幂的乘积 所以我们预处理70以内的质数,把它作为二进制状压的状态,每个在序列中出现数Hash一下,组合数推一下 所以把奇次幂的状态表示为 阅读全文
posted @ 2018-09-24 22:12 guapisolo 阅读(268) 评论(0) 推荐(0)
摘要: 题目大意:给你一个无向连通图(n<=30),点分为高点和低点,高点数量<=15,如果两个高点和低点都直接连边,那么我们称这三个点形成一个valley,每个点最多作为一个valley的组成部分,求valley的最大数量 高点状压,然后枚举低点,判断这个低点能否影响答案 注意:上一层的值要全都先赋给这一 阅读全文
posted @ 2018-09-24 22:10 guapisolo 阅读(183) 评论(0) 推荐(0)
摘要: 题目大意:给你一个神奇的印章,他左右下三个面都是直的,上面是凸凹不平的面(凸凹都平行于别的面)。然后给你一个轮廓线,如果一个面能与轮廓线完全重合,可以把印章的这个沿着轮廓线拓印,求所有的拓印方案。 把轮廓线和印章相邻两个高度打个查分,然后KMP匹配一下就行了。 阅读全文
posted @ 2018-09-24 22:09 guapisolo 阅读(209) 评论(0) 推荐(0)
摘要: 题目大意:一群猴子打字,给定猴子输入每种字符的概率以及输入次数,求输出的文本中出现指定字符串的概率 强烈建议看这篇文章:http://www.matrix67.com/blog/archives/366 里面对这道题的分析很详细 思路比较清奇,我们先用KMP求出指定串的next,接下来是DP的过程 阅读全文
posted @ 2018-09-24 22:05 guapisolo 阅读(166) 评论(0) 推荐(0)
摘要: 题目大意:给你一个字符串,求所有前缀在原串的出现次数之和 KMP的next指针相当于可以转移的位置呀 把next指针当成边跑拓扑就行啦! 阅读全文
posted @ 2018-09-24 22:05 guapisolo 阅读(110) 评论(0) 推荐(0)
摘要: 题目大意:给你两个串,一长一短,如果长串中某个子串和短串完全相同,则这个子串可以被替换成"#",求长串所有的表达形式....... 比如"hehehehe"和"hehe",则有5种情况,"#hehe","he#he","hehe#","##","hehehehe" 首先我们KMP/哈希找出长串中所有 阅读全文
posted @ 2018-09-24 22:04 guapisolo 阅读(163) 评论(0) 推荐(0)
摘要: 题目大意:有N个站点的轻轨站,有一个容量为C的列车起点在1号站点,终点在N号站点,有K组牛群,每组数量为Mi(1≤Mi≤N),行程起点和终点分别为Si和Ei(1≤Si<Ei≤N)。计算最多有多少头牛可以搭乘轻轨。 一道经典的贪心题目,每当一头牛上车的时候,如果超载,我们就优先踢出去行程终点比较远的那 阅读全文
posted @ 2018-09-24 22:03 guapisolo 阅读(283) 评论(0) 推荐(0)
摘要: 题目大意:给你两个序列,你可以两个序列的点之间连边 要求:1.只能在点权差值不大于4的点之间连边 2.边和边不能相交 3.每个点只能连一次 设表示第一个序列进行到 i,第二个序列进行到 j,最多连的边数,容易得到方程: 不连边: 连边: 实际是这样的,每个位置如果想连边,就要从能连边的位置之前找最大 阅读全文
posted @ 2018-09-24 21:57 guapisolo 阅读(164) 评论(0) 推荐(0)
摘要: 题目大意:给你两个序列,可以序列进行若干次旋转操作(两个都可以转),对两个序列相同权值的地方连边,求最少的交点数 记录某个值在第一个序列的位置,再记录第二个序列中某个值 在第一个序列出现的位置 ,求逆序对数量即可 本以为是一道逆序对水题,结果被卡了20分。看了题解才恍然大悟,实际上,序列可以旋转 ≠ 阅读全文
posted @ 2018-09-24 21:54 guapisolo 阅读(207) 评论(0) 推荐(0)
摘要: 题目大意:给你一棵边权树,定义两点间距离为它们唯一路径上的最小路权,求与某点距离不大于K(k为已知)的点的数量 带权并查集维护集合内元素总数 路和问题 都按权值大到小排序,枚举问题, 建权值不小于K的边,并查集维护连通性,求集合元素内总数即可 阅读全文
posted @ 2018-09-24 21:52 guapisolo 阅读(487) 评论(0) 推荐(0)
摘要: 题目大意:给你一个序列,你可以翻转任意一段子序列一次,求最长不下降子序列长度 tips:子序列可以不连续,但不能破坏在原序列中的顺序 观察数据范围,n<=50,很小,考虑dfs *dfs来跑区间dp可以巧妙的解决区间两端元素的置换问题 记忆化搜索,f[i][j][l][r] 代表对于区间[i,j], 阅读全文
posted @ 2018-09-24 21:41 guapisolo 阅读(501) 评论(0) 推荐(0)