随笔分类 - 字符串
摘要:题意:求 $T$ 与 $S$ 的每个后缀的最长公共前缀。 先令 $s=S+T$ ,$z[i]$ 表示 $T$ 与 $suff_i$ 的最长公共前缀。 (注意下标是从 $0$ 开始的) $z[i]=min(z[i l],r i+1)$ ,前一部分如图: 后一部分是要保证不能越过最靠右的边界,因为更靠右
阅读全文
摘要:题解:二分+莫队 "感谢hl666大佬" 我们搞出后缀数组然后对于每一个询问串二分出在后缀数组上对应的询问区间。 然后我们的问题变成了区间颜色数,即不同种类的后缀数,开个桶即可。 如何考虑对每只猫的贡献?比如总询问数为 $cnt$ ,有一只猫待在桶里的时间为 $[i,j)$ 。我们可以先假设猫能在桶
阅读全文
摘要:题意:求出现次数 $\geq K$ 的最长子串的长度。 $SA$ 中所有 $i\in [l,l+K 2],ht[i]$ 的最小值。单调队列。 $SAM$ 建出来后,跑一边子树和即为出现次数顺便记下答案。 2020.01.09
阅读全文
摘要:题意:求 $\sum_{1\leq i include include define R register int define ll long long using namespace std; namespace Luitaryi { inline int g() { R x=0,f=1; re
阅读全文
摘要:题意:两个字符串取出相同子串的方案数,方案不同当且仅当这两个子串中有一个位置不同。 $SA$ 后缀的前缀是子串,即求 $\sum_{i include include define R register int define ll long long using namespace std; nam
阅读全文
摘要:题意:求差分串的最长公共子串。 $SA$ 二分答案 $k$ ,即求是否存在一段连续的 $ht[]$ ,且其中包括了所有串的后缀。 $SAM$ 板子? 2020.01.09
阅读全文
摘要:题意:对于每个 $k$ ,求 $S[p,p+k 1]==S[q,q+k 1],(p,q)为无序二元组$ 的方案数,并求出在 $k$ 一定时,$vl[p]\times vl[q]$ 的最大值。 $SA$ 并查集:我们把 $ht[]$ 当做边,合并时计算两个集合产生的贡献; 好像还可以单调栈+ST表做吧
阅读全文
摘要:A1 100pts 考试时暴力打表+发现三次函数于是暴力解方程。 更好的: 发现是在枚举子矩形并求面积,于是有: $\sum_{x}^n\sum_{y}^m x y \times (n x+1) (m y+1)$ 设$f(x)=\sum_{x}^n x (n x+1)$ $=1 n + 2 (n 1
阅读全文
摘要:首先$LIS$显然:$f[i][j]=max(f[i][j-1],f[i-1][j],(a[i]==b[j])*f[i-1][j-1])$ 考虑如何转移数量: 首先,不管$a[i]$是否等于$b[j]$, 都有$h[i][j]+=h[i-1][j]*(f[i][j]==f[i-1][j])+h[i]
阅读全文
摘要:两道题都是求循环节的。。。但是一道是学哈希时做的,另一道是学$KMP$时做的 POJ2604 用的哈希。。。枚举长度的因数作为循环节的长度,然后暴力算出所有循环节位置的哈希值,看看是否相等。 POJ1961 用的$kmp$详解 2019.06.27
阅读全文
摘要:辣鸡知识 1.匹配子串 哈希:处理出子串和模式串的哈希值,然后一位位匹配,$O(n)$ KMP 2.最短循环节 枚举约数,判断每段的哈希值是否相等 KMP:若字符串的长度为$len$,则字符串存在循环节当且仅当$len%(len-nxt[len])==0&&len/(len-nxt[len])>1$
阅读全文
摘要:当初竟然看成子串了$qwq$,不过老师的$ppt$也错了$qwq$ 由于子序列一定是的排列,所以考虑插入$1$到$m$到$n-m+1$到$n$; 如何判断呢?可以用哈希$qwq$; 我们用线段树维护哈希值,合并时用就把左子树的哈希值$x[ls]$在$B$进制下左移$sum[rs]$位,即$x[tr]
阅读全文
摘要:好,暴力能拿$50pts\space qwq$ 暴力的思路就是一直跳$nxt[j]$,直到它的长度小于串的一半,然后开始计数,当然要接着跳$nxt[j]$ 正解:考虑没有长度要求的(不要求不重合)公共前后缀的数目,显然$ans[i]=ans[j]+1$相当于$i$比$j$是多了$i$它本身。 所以求
阅读全文
摘要:设$f[i]$表示切掉前$i$位和后$i$位后,即剩下$s[i+1]到s[n-i]$,的公共前后缀长度。此时我们发现,$f[i-1]$相对于$f[i]$少切了两个$char$,所以有$f[i-1]\leq f[i]+2$,所以我们可以有上界地递推了。 当然最终答案是$max(f[i]+i),且1-s
阅读全文
摘要:做一个树上前缀异或和,然后把前缀和插到$01trie$里,然后再对每一个前缀异或和整个查一遍,在树上从高位向低位贪心,按位优先选择不同的,就能贪出最大的答案。 2019.06.13
阅读全文
摘要:好题。。。开阔思路 把每个前缀异或和依次插入$01trie$,插之前找一个最优的(就是从高位向低位贪心,尽量走相反方向)看看能不能更新答案,此时相当于找到了区间右端点不超过某个点$r$的最大或和$f[r]$。对于后缀也同理来一波上面的操作,然后就找到了区间左端点端点不少于某个点$l$的最大异或和。所
阅读全文
摘要:建一颗$trie$树(当然你哈希也资瓷),边插边更新,看看搜到最底时有多少个字符串,然后更新。 2019.06.13
阅读全文
摘要:先把两个串能匹配模式串的位置找出来,然后标记为$1$(标记在开头或末尾都行),然后对标记数组求一个前缀和,这样可以快速查到区间内是否有完整的一个模式串。 然后二分子串(答案)的长度,每次把长度为$md$的串扔到哈希表里,查一波匹不匹配。 2019.06.12
阅读全文

浙公网安备 33010602011771号