字符串
L_0_Forever_LF
一个热爱OI的OIer
展开
-
BZOJ3998: [TJOI2015]弦论 解题报告
Description对于一个给定长度为N的字符串,求它的第K小子串是什么。Input第一行是一个仅由小写英文字母构成的字符串S第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个。T=1则表示不同位置的相同子串算作多个。K的意义如题所述。题解:这里介绍SA的做法(相对SAM会慢一些) 先处理出有多少个不相同的子串,对于T=0的询问,直接找第k小子串即可 对于T=1的询问,二分答案是第原创 2016-10-10 13:47:30 · 583 阅读 · 0 评论 -
BZOJ3946: 无聊的游戏
将初始字符串和添加的字符串按照添加顺序 逆序 拼成一个大串S,那么一个串可以被表示成S[l1~r1]+S[l2~r2]… 我们维护height[i]=LCP(s[i-1],s[i]),L~R的LCP=min{ height[L+1~R] } 每次在L~R前面添加一个串T时,L+1~R的height区间加|T|,height[L]和height[R+1]要重新计算,二分加hash计算 考虑怎么...原创 2018-03-18 19:44:37 · 651 阅读 · 2 评论 -
BZOJ4259: 残缺的字符串
一直在想各种字符串匹配算法…将’a’视为1,’b’视为2,‘*’视为0 那么A0......AnA0......AnA_0......A_n和Bk.....Bk+n−1Bk.....Bk+n−1B_k.....B_{k+n-1} 匹配的条件就是 ∑nj=0(Aj−Bk+j)2AjBk+j=0∑j=0n(Aj−Bk+j)2AjBk+j=0\sum_{j=0}^n(A_j-B_{k+j})^2...原创 2018-03-05 16:55:25 · 263 阅读 · 0 评论 -
BZOJ3160: 万径人踪灭
一开始看错题以为位置可以不对称……在串S相邻字符间插入#就可以处理偶数回文串了 不连续的回文子序列个数=回文子序列个数-连续的回文子序列个数 连续的可以用Manacher算 对于不连续的,若i是回文中心,i两侧对称的字符个数为c[i],就有2c[i]−12c[i]−12^{c[i]}-1个因为位置是对称,计算c[i]可以用fft,先令a的值为1卷一次再令b的值为1卷一次,注意回文中心...原创 2018-03-05 17:02:51 · 183 阅读 · 0 评论 -
Codeforces 932G. Palindrome Partition
我能不能扔发链接跑啊qaq.....原创 2018-03-10 14:59:38 · 742 阅读 · 4 评论 -
BZOJ1125: [POI2008]Poc
我是真的没有任何码力可言qwq splay维护串的hash值 每次更改hash值,在splay上给所有那个值的点打个答案标记 特殊处理交换同一个串code:#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bit原创 2017-12-08 09:42:31 · 533 阅读 · 0 评论 -
BZOJ4032: [HEOI2015]最短不公共子串
建出A串B串的SAM第一个询问可以直接暴力在SAM上跑所有子串.. 第二个询问…好像也可以暴力跑所有子串.. 第三个询问,用状态(i,j,t)表示当前在A串的i位置,B串SAM的j节点,子序列长度为t,每次枚举26个字母转移,把新状态塞进堆里 第四个询问,f[i][j]表示当前子序列结尾在A串是i,B串是j,最短长度code:#include<set>#include<map>#inclu原创 2017-10-18 22:17:28 · 412 阅读 · 0 评论 -
BZOJ2119: 股市的预测
找有多少个形如ABA的串,B的长度给定 可枚举A的长度L,按L分块,每块内确立一个位置为关键点,那么两端的A都会覆盖且仅覆盖一个关键点 枚举左端被覆盖的关键点i,右端相对应匹配的位置是j=i+L+m,i和j向左,向右分别匹配最长公共后缀和前缀l、r(和L取min防止覆盖其他关键点造成重复) 建立正反串的SA,rmq求l、r,若l+r>=L,则l+r-L+1就是这两点的贡献code:#inclu原创 2017-10-18 07:16:26 · 386 阅读 · 0 评论 -
BZOJ1100: [POI2007]对称轴osi
一眼感觉是计算几何题…然后不会做…. 结果居然是字符串题….如果我们能将一个多边形表示成一个字符串的话,对称就变成了回文 我们用边长代表这条边,用两条邻边的叉积代表这个点(因为叉积就是有向面积) 然后将这个数字序列复制一份到后面 找所有长度>2*n的回文串 最后答案要/2,因为每个对称轴会被算两次code:#include<set>#include<map>#include<deque原创 2017-09-23 21:00:01 · 499 阅读 · 0 评论 -
后缀自动机学习小结
这是第不知道多少次学SAM…感觉以后还要忘赶紧留个笔记..欢迎指出错误SAM有两个东西,一个是trans,一个是parent树 第一个东西的作用,就是如果你从根节点开始,走一个串,如果这个串是原串的子串,就一定能够走到这么一个点,他的parent树里的子树里的right的并集就是这个串在原串出现的所有位置,如果这个串不是子串,就不能够走到一个点 parent树,可以把它理解成反串的后缀树, 因原创 2017-08-19 21:36:22 · 339 阅读 · 0 评论 -
BZOJ2803: [Poi2012]Prefixuffix
有个很厉害的性质,推出了这个就可以DP了有了这个DP,就可以枚举找一个最大值了 这题好像需要双hashcode:#include<map>#include<set>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<bitset>#include<string>#i原创 2017-03-06 22:00:06 · 402 阅读 · 0 评论 -
BZOJ2795: [Poi2012]A Horrible Poem
一个字符串若被分成k个循环节,每个循环节里每种字母出现次数肯定都是一样的,那么循环节的个数k一定是这段字符串里每种字母出现次数的gcd的约数,然后枚举k,hash判一下#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<原创 2017-03-06 13:46:13 · 686 阅读 · 0 评论 -
BZOJ3507: [Cqoi2014]通配符匹配 解题报告
日常吐槽部分可以跳过这题又坑了蒟蒻一下午,表示很不爽(自己弱能怪谁) 看完题想了一会一直觉得是很高级的做法,自己肯定不会了,搜了题解并不能看懂在讲什么,去问大神,Claris表示这不是 贪心+hash 就能搞定的题吗(为什么我连贪心都没想到啊还有怎么hash匹配并不会) 敲完怎么拍都拍不出错,一个小时后拍出来结果发现一个判 ? 的地方下标没更新,改了就A了。 但是为什么我注释掉这个判 ? 的语原创 2016-10-01 18:09:47 · 1644 阅读 · 0 评论 -
BZOJ3620: 似乎在梦中见过的样子 解题报告
这题一直没想出来,后来发现O(n2)O(n^2)能过…….SA+n2SA+n^2枚举 枚举一个左端点i,处理一下前缀i和每个前缀的height值,然后往右枚举右端点j,判一下height值是不是>k,如果是的话,把不覆盖中间全部区间的所有方案加入答案,注意不同j的答案可能重复,所以先存到一个数组里,弄一下前缀和,扫完j扫一遍数组就好了code:#include<set>#include<map>原创 2016-10-11 20:45:44 · 963 阅读 · 0 评论 -
Codechef TANDEM
定义形如XXX的串是好的串,在好的串的前提下,若这个串后面的第一个字符和这个串的第一个字符不同,这个串就是有趣的串,否则是无聊的串,求S的所有子串中,有趣的串和无聊的串的个数枚举XXX中X的长度L,每L个位置设一个关键点,那么一个好的串一定会且仅会经过3个关键点,枚举第一个,计算他和第二个关键点的LCP,LCS,可以得到好的串合法的左端点区间,注意到若一个好的串将他右移后仍然是好的串,那么他一...原创 2018-04-20 21:32:17 · 394 阅读 · 0 评论