
后缀数组
C202044zxy
这个作者很懒,什么都没留下…
展开
-
[NOI2016]优秀的拆分
一、题目点此看题二、解法首先转化问题,我们可以求出a[i],b[i]a[i],b[i]a[i],b[i],即以iii结束///开始的AAAAAA串的数量,这样答案就可以表示为:∑a[i]×b[i+1]\sum a[i]\times b[i+1]∑a[i]×b[i+1]求这两个数组,可以隔距离lenlenlen设置一个点,这样一个长为2×len2\times len2×len的AAAAAA串...原创 2020-03-01 11:31:08 · 268 阅读 · 0 评论 -
[BZOJ 4310] 跳蚤
一、题目点此看题二、解法答案一定具有单调性,我们可以二分答案的字典序排名,利用后缀数组可以O(n)O(n)O(n)将排名转化成在SSS串中的位置[L,R][L,R][L,R]。具体就是枚举排名为iii的后缀,算出它们子串的贡献,如果子串个数达到就可以找到位置,否则加上贡献继续找。考虑如何检查,我们从后往前扫,每次贪心地加入一个字符,中途维护划分的子串区间[i,j][i,j][i,j],直接...原创 2020-02-28 11:12:44 · 219 阅读 · 0 评论 -
CF822E Liar
一、题目点此看题二、解法考虑dpdpdp,设f[i][j]f[i][j]f[i][j]为SSS串的前iii个划分了jjj段的最大长度,我们用刷表法更新:当前不选,则f[i+1][j]=f[i][j]f[i+1][j]=f[i][j]f[i+1][j]=f[i][j]选lcplcplcp(选最多的一定最优),则f[i+lcp][j+1]=f[i][j]f[i+lcp][j+1]=f[i]...原创 2020-02-28 08:39:25 · 289 阅读 · 0 评论 -
[USACO07DEC]Best Cow Line, Gold
一、题目点此看题二、解法一开始想到了bfsbfsbfs,但是数据范围太大,这里考虑后缀数组的解法。假设我们选取到了s[l...r]s[l...r]s[l...r],如何决策选s[l]s[l]s[l]还是选s[r]s[r]s[r]呢?可以比较后缀lll和前缀rrr的字典序大小,这就可以用后缀数组优化。我们先建出S#S′S\#S'S#S′(中间是特殊字符,S′S'S′是SSS的翻转),那么后缀...原创 2020-02-27 12:30:39 · 242 阅读 · 0 评论 -
[AHOI2013]差异
一、题目点此看题二、解法先对原式做一个变形:∑1≤i<j≤nTi+Tj−2×lcp(Ti,Tj)\sum_{1\leq i<j\leq n} T_i+T_j-2\times lcp(T_i,T_j)1≤i<j≤n∑Ti+Tj−2×lcp(Ti,Tj)=n(n−1)(n+1)2+∑1≤i<j≤n2×lcp(Ti,Tj)=\frac{n(n-1)(n+1)}{...原创 2020-02-01 20:18:32 · 258 阅读 · 0 评论 -
[BJWC2010]外星联络
一、题目点此看题二、解法考虑后缀数组来完成此题,可以先算出sa,rk,heightsa,rk,heightsa,rk,height有了这些以后,我们来看关键代码(我也是第一次写后缀数组的题,结合代码讲一讲):for(int i=2;i<=n;i++) for(int j=hi[i-1]+1;j<=hi[i];j++) { int k=i; ...原创 2020-02-01 18:41:20 · 201 阅读 · 0 评论