摘要:[Sdoi2016]生成魔咒 动态维护不同子串的数量 想想如果只要查询一次要怎么做,那就是计算各个点的$len[u] len[link[u]]$然后求和即可,现在要求动态更新,我们可以保存一个答案,然后每次更新后缀链接的时候,如果是连接的话就要加上$len[u] len[link[u]]$,断开的话 阅读全文
posted @ 2020-04-15 16:17 _kiko 阅读(19) 评论(0) 推荐(0) 编辑
摘要:P2408 不同子串个数 计算一个字符串的不同子串个数 两种方法,一种是$dp$出来$SAM$从起点开始的路径数量 另一种方法就是计算每个点的$len[i] len[link[i]]$这个计算的就是这个等价类的不同串的数量 阅读全文
posted @ 2020-04-15 15:40 _kiko 阅读(15) 评论(0) 推荐(0) 编辑
摘要:LCS2 Longest Common Substring II 多个字符串找最长公共子串 以其中一个串建$SAM$,然后用其他串一个个去匹配,每次的匹配方式和两个串找$LCS$一样,就是要记录$SAM$的每个状态和当前匹配串匹配的最大值$maxx$,这个在匹配完一个串之后需要通过$parent$树 阅读全文
posted @ 2020-04-15 11:55 _kiko 阅读(13) 评论(0) 推荐(0) 编辑
摘要:BZOJ2555. SubString 要求在线询问一个串在原串中出现的次数,并且可以在原串末尾添加字符串 如果没有修改的话,考虑建出$parent$树之后统计每个$endpos$节点的$right$集合大小,现在要求动态添加字符,那么由于$parent$树的形态会变,所以用$LCT$来维护$par 阅读全文
posted @ 2020-04-14 23:57 _kiko 阅读(13) 评论(0) 推荐(0) 编辑
摘要:POJ1743 Musical Theme 要找长度$\ge 5$且出现次数$\ge 2$并且第一次出现和最后一次出现不重叠的最长子串。 题目条件中,如果对于两个串,在一个串的每个数上都加上相同的数之后可以得到另一个串,那么这个两个串可以被是相同的。 首先我们先得到差分数组,然后要求的就是差分数组中 阅读全文
posted @ 2020-04-14 19:48 _kiko 阅读(14) 评论(0) 推荐(0) 编辑
摘要:BZOJ2882 工艺 给出一个串,要求其循环同构串中字典序最小的那个 串翻倍建$SAM$然后从起点开始贪心的跑$n$次即可 当然也能用最小表示法来做 阅读全文
posted @ 2020-04-14 16:48 _kiko 阅读(14) 评论(0) 推荐(0) 编辑
摘要:BZOJ3998 弦论 "🔗" 给一个字符串,问其第$K$小字串是什么 两种形式 1.不同起始位置的相同串只算一次 2.不同起始位置的相同串各算一次 首先建$SAM$ 所有串的数量就是$SAM$中的从起始点开始的路径数量,所以可以先在$SAM$上$dp$出来从所有节点开始的子串数量,然后递归找就好 阅读全文
posted @ 2020-04-14 16:14 _kiko 阅读(15) 评论(0) 推荐(0) 编辑
摘要:POJ2774 Long Long Message 找两个串的 最长公共字串 对其中一个串$s$建$SAM$,然后我们如何找到最长公共字串,办法就是枚举$t$串所有的前缀,然后找各个前缀的最长能和$s$串匹配的后缀。 如果一个个跑需要$O(n^2)$,$SAM$可以来保存之前匹配的状态,假设现在匹配 阅读全文
posted @ 2020-04-14 16:02 _kiko 阅读(14) 评论(0) 推荐(0) 编辑
摘要:Codeforces Round 633(Div.2) $A.Filling\ Diamonds$ 答案就是构成的六边形数量+1 $B.Sorted\ Adjacent\ Differences$ 考虑排完序之后从中间开始一左一右选择即可 $C.Powered\ Addition$ 考虑对于每个数, 阅读全文
posted @ 2020-04-13 01:20 _kiko 阅读(211) 评论(0) 推荐(2) 编辑
摘要:$Educational\ Codeforces\ Round\ 85\ (Rated\ for\ Div.2)$ $A. Level Statistics$ 每天都可能会有人玩游戏,同时一部分人会过关,玩游戏的人数和过关的人数会每天更新,问记录的数据是否没有矛盾 $B Middle Class$ 阅读全文
posted @ 2020-04-11 14:38 _kiko 阅读(29) 评论(0) 推荐(0) 编辑