随笔分类 - 字符串
摘要:BZOJ 3172 题目中的文章是由所有单词拼出来的,但是单词直接互相独立 首先单词都丢进AC自动机,然后一个个跑匹配 每一次更新$fail$树上一段路径前缀的节点即可 事实上就是在哪里放一个1,按次向根累加就能得到答案
阅读全文
摘要:POJ - 2778 对于所有串构建AC自动机,将AC自动机上的位置作为状态,暴力矩阵转移即可 int n,m; int a[N]; char s[N]; int val[N]; const int SIZE=101; int trie[SIZE][4]; int End[SIZE]; int fa
阅读全文
摘要:"HDU 2457" 把AC自动机上的状态存进dp状态里,直接暴力转移就可以了
阅读全文
摘要:"ZOJ 3228" 先把模板串都丢进AC自动机 然后跑查询 对于允许重叠的,我们直接对$fail$树上一段路径的节点的答案++ 否则我们分串的长度讨论,对于每种长度的串处理一个答案$dp[i][6]$
阅读全文
摘要:POJ 1204 把要查询的串都扔进AC自动机,然后暴力check就是了
阅读全文
摘要:yww 与树上的回文串 官方题解不是人啊,半天看不懂 首先是前置知识 Border定理,在这道题的应用就是把一个串的回文的前缀,按照长度分成$O(\log |S|)$个等差数列 分析 路径问题很常见的可以考虑点分治,问题在于如何合并两个子树里的串回文的个数 如果符合条件的串只有在一边,可以直接$df
阅读全文
摘要:51Nod-1469 淋漓尽致子串 (后缀自动机) 对于原串构造后缀自动机 我们只考虑$|endpos|>1$的状态 发现对于一个状态,只有其中最长的子串会产生贡献,否则会在$p_i-1$出产生冲突 对于最长串的$p_i-1$位置,如果$link/parent$树上的一个儿子的$|endpos|>1
阅读全文
摘要:51Node-1600 Simple KMP (后缀自动机+树剖线段树/LCT) 题面给人一种非常复杂的感觉 我们考虑每次加入一个字符,产生的每一个新的后缀的贡献 对于后缀$S_{x,i}$我们可以从$i-1$继承过来得到$S_{x,i-1}$的答案,只用考虑$i$的贡献 任意一个$S_{j,i}(
阅读全文
摘要:HDU-5470 Typewriter (后缀自动机优化dp) 这个$dp$有两种转移 1.\(dp[i-1]+cost[s[i]] \rightarrow dp[i]\) 2.\(dp[j]+(i-j) \cdot A+2 \cdot B \rightarrow dp[i]\) ( $s_{j+1
阅读全文
摘要:HDU-5343 MZL's Circle Zhou (后缀自动机) 题意:从$A,B$两串中各选出一个子串$x,y$(可以为空),求能构成的不同串的个数 为了避免重复统计,我们需要规定优先级 对于任意一个答案中的串,它的合法切分中,我们使得$|x|$最大 对于$A,B$分别构建后缀自动机 我们统计
阅读全文
摘要:HDU-4641 K-string (后缀自动机+线段树合并) 由于$k$是固定的,所以会比较方便 对于整个串构建后缀自动机 利用线段树合并离线求出每个点的$endpos$情况,找到第$k$个元素,那个元素以后的的位置都出现了$k$次,将它们的答案加上$len-len[link]$,最后累前缀和即可
阅读全文
摘要:HDU-6194 string string string(后缀自动机) 这个题用后缀自动机做真的简单 统计一下每个状态$|endpos|$是否等于$k$就能得到答案 #include<bits/stdc++.h> using namespace std; #define reg register
阅读全文
摘要:HDU-5853 Jong Hyok and String (广义后缀自动机) 题意:给定一些串,每次查询一个串,求所有的 (在所有串中$endpos$都与它相同的),(出现在给定串的)不同子串个数 广义后缀自动机? 是不是听起来很高大上? 博主当然不明白原理,但是mo有关系 对于处理多个串的子串问
阅读全文
摘要:HDU-4416 Good Article Good sentence (后缀自动机) 题意:给定一个串$A$和若干串$B_i$,求出现在$A$中且不出现在$B$中的子串个数 这个题我们不能把$B_i$接在一起做,会直接MLE! 对于$A$构建$SAM$ 考虑对于每个$B_i$把出现在$B_i$中的
阅读全文
摘要:LOJ-2033.[SDOI2016]生成魔咒 (后缀自动机) 直接一点就后缀自动机了。。。 注意要开$map$存储状态转移 每次加入一个新的字符就加上新的状态的子串数量$len[new]-len[link[new]]$ #include<bits/stdc++.h> using namespace
阅读全文
摘要:POJ-3693 Maximum repetition substring (后缀数组) 题意:求连续重复次数最多的子串 一个连续重复子串可以描述为$l,r,len$(端点,循环节长度) \(O(n^2)\):直接枚举$l,len$,然后求$l$和$l+len$的$LCP$,就能得到最大的$r$ 考
阅读全文
摘要:POJ-3294 Life Forms (后缀数组) 要按照字典序输出的话后缀自动机就比较麻烦了,所以没有 把所有字符串接在一起,中间用不同的奇怪的字符隔开 二分答案$x$,将$LCP$数组分组使得每组中的$LCP\ge x$,找一下是否一半的串都在这组中出现过了即可 输出注意格式 #include
阅读全文
摘要:POJ-1743 Musical Theme (后缀系列) 由于有着所谓的升降调(?),所以可以理性地想到先作差 然后就是要统计最长的 至少不重叠地出现两次的 子串 注意有个Trick : 小于5不能输出! \(\ \) 后缀数组 依然地我们先二分答案$x$, 对于$LCP$数组分组,每组之内$LC
阅读全文
摘要:Luogu-2852 [USACO06DEC]牛奶模式Milk Patterns (后缀系列) 题意:求至少出现了$k$次的最长子串 后缀数组 二分长度$x$ 我们可以将$LCP$数组分段,每段内的$LCP[i]\ge x$,那么出现这些后缀长度为$x$的前缀均相同,然后统计每段最多包含几个后缀即可
阅读全文
摘要:HDU-5008 Boring String Problem(k大子串,后缀系列) 这个题似乎没有办法用后缀自动机写。。。 \(\ \) 后缀数组 由于后缀数组已经排好序,所以可对于$sa[i]$考虑其贡献的个数为$n-sa[i]+1-lcp[i-1]$ 考虑个数累前缀和$Sum[i]$,二分就$S
阅读全文

浙公网安备 33010602011771号