随笔分类 -  字符串

摘要:luoguP4173 残缺的字符串 FFT 链接 "luogu" 思路 和昨天做的题几乎一样。 匹配等价于(其实我更喜欢fft从0开始) $\sum\limits_{i=0}^{m 1}(S[i+j] T[i])^2 T[i] S[i]=0$ 展开得到 $\sum\limits_{i=0}^{m 1 阅读全文
posted @ 2019-07-20 21:47 ComplexPug 阅读(146) 评论(0) 推荐(0) 编辑
摘要:4503: 两个串 链接&&题意 "bzoj" 兔子们在玩两个串的游戏。给定两个字符串S和T,兔子们想知道T在S中出现了几次, 分别在哪些位置出现。注意T中可能有“?”字符,这个字符可以匹配任何字符。 思路 没有通配符。 $\sum\limits_{i=1}^{m 1}(S[j+i] T[i])^2 阅读全文
posted @ 2019-07-19 12:25 ComplexPug 阅读(208) 评论(0) 推荐(0) 编辑
摘要:luoguP4112 [HEOI2015]最短不公共子串 链接 "luogu" "loj" 思路 子串可以用后缀自动机,子序列可以用序列自动机。 序列自动机是啥,就是能访问到所有子序列的自动机。 每个点记录下一个字母最近出现的位置。不过我这里构造是$O(n^2)$。 然后进行bfs进行广搜就行了。 阅读全文
posted @ 2019-07-14 09:44 ComplexPug 阅读(145) 评论(0) 推荐(0) 编辑
摘要:luogu P4248 [AHOI2013]差异 链接 "luogu" 思路 $\sum\limits_{1 define int long long using namespace std; const int N=1e6+7; int n,c[N=1; i) add(s[i] 'a',i); f 阅读全文
posted @ 2019-07-14 08:04 ComplexPug 阅读(148) 评论(0) 推荐(0) 编辑
摘要:luogu P3975 [TJOI2015]弦论 链接 "bzoj" 思路 建出sam。 子串算多个的,统计preant tree的子树大小,否则就是大小为1 然后再统计sam的节点能走到多少串。 然后就可以在sam的贪心的走了。 代码 阅读全文
posted @ 2019-07-13 20:44 ComplexPug 阅读(121) 评论(4) 推荐(0) 编辑
摘要:bzoj3676 [Apio2014]回文串 SAM+树上倍增 链接 "bzoj" "luogu" 思路 根据manacher可以知道,每次暴力扩展才有可能出现新的回文串。 所以推出本质不同的回文串个数是O(n)级别的。 每次查询一个串出现的个数。 建立出parent树,一个串出现的个数就是对应pa 阅读全文
posted @ 2019-07-13 09:51 ComplexPug 阅读(190) 评论(0) 推荐(0) 编辑
摘要:CF 528D. Fuzzy Search NTT 题目大意 给出文本串S和模式串T和k,S,T为DNA序列(只含ATGC)。对于S中的每个位置$i$,只要中[i k,i+k]有一个位置匹配了字符$i$,那么就认为$i$可以匹配。求S中有多少位置匹配了T。 思路 一共有四个字母,我们分别计算每个字母 阅读全文
posted @ 2019-04-14 11:44 ComplexPug 阅读(119) 评论(0) 推荐(0) 编辑
摘要:NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 $n^2$的暴力挺简单的。 01trie树求最大异或和相信大家都会。不会看 "这里" . 这与我们今天这个题目有关吗? 毫无关系。 xor[i]的某一位为1,xor[j] 阅读全文
posted @ 2019-03-30 19:48 ComplexPug 阅读(208) 评论(0) 推荐(0) 编辑
摘要:链接 bzoj不能auto https://www.luogu.org/problemnew/show/P3426 思路 这个要求的串一定是S的前缀和S的后缀。 转化一下 建立出来fail树(fail[i] i的树) 答案就在0和n之间的链条上,且答案在分界点上(上面全不可以,下面全可以) 这是样例 阅读全文
posted @ 2019-03-28 16:17 ComplexPug 阅读(171) 评论(0) 推荐(0) 编辑
摘要:bzoj2124: 等差子序列线段树+hash 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2124 思路 找大于3的等差数列其实就是找等于三的等差数列 三个等差数列的话,枚举中间点。 如果有对称点(a[i] j,a[i]+j)在两侧,那么 阅读全文
posted @ 2019-03-15 14:47 ComplexPug 阅读(171) 评论(0) 推荐(0) 编辑
摘要:链接 http://acm.hdu.edu.cn/showproblem.php?pid=1358 思路 当初shenben学长暑假讲过,当初太笨了,noip前几天才理解过来、、 我也没啥好说的 代码 cpp include include include using namespace std; 阅读全文
posted @ 2019-02-21 13:56 ComplexPug 阅读(107) 评论(0) 推荐(0) 编辑
摘要:链接 https://codeforces.com/contest/213/problem/E 题目大意 给出两个排列a、b,长度分别为n、m,你需要计算有多少个x,使 得$a_1 + x; a_2 + x; a_3 + x、、、 a_n + x$ 是b 的 子序列 (不连续的那种)。 思路 巧妙啊 阅读全文
posted @ 2019-02-21 11:38 ComplexPug 阅读(489) 评论(1) 推荐(0) 编辑
摘要:"https://oj.zrt.io/problem/44" 比较容易懂得 "文档" "新浪" 阅读全文
posted @ 2018-12-21 11:12 ComplexPug 阅读(81) 评论(0) 推荐(0) 编辑
摘要:思路 求出height之后 只要相邻两个子串是本串不同的来更新就好 因为这样一定是最优啊、、取min显然越长越不好 代码 cpp include include include define FOR(i,a,b) for(int i=a;i=b; i) using namespace std; co 阅读全文
posted @ 2018-12-21 08:17 ComplexPug 阅读(94) 评论(0) 推荐(0) 编辑
摘要:前言 总之这个东西说起来很麻烦就是了, 思路 差分合并+后缀数组+二分(dddl) 类似于那个 "bzoj1031" 的复制子串和那个 "poj1743" 的差分 来看个例子 变成了这个(最后一个INF最好删掉吧,应该不影响的吧) 很明显,答案是min[5,10]+1=1+1=2 belong是后缀 阅读全文
posted @ 2018-12-20 21:24 ComplexPug 阅读(121) 评论(0) 推荐(0) 编辑
摘要:思路 不得不说,罗穗骞太厉害了 他写的论文比哪一篇博客都好 去看吧,也别看我的了 里面有这题目详解 "论文" 代码 cpp // 不得不说,罗穗骞nb哇,%%%%%%%%% / 0 0 1 1 2 2 3 3 4 10 1 2 3 4 5 1 2 3 4 5 差分 1 1 1 1 0 1 1 1 1 阅读全文
posted @ 2018-12-20 14:35 ComplexPug 阅读(97) 评论(0) 推荐(0) 编辑
摘要:前言 其实就是个后缀数组模板题 可还是有几个的地方不太明白 思路 先将子串复制一遍,组成长度为2 n的子串 给出的子串一定会在前n个后缀 而且后面的优先级不会影响前面的相对大小 然后求得sa输出就好 输出的时候把没有必要输出的忽略掉就好 代码 cpp include define FOR(i,a,b 阅读全文
posted @ 2018-12-18 20:07 ComplexPug 阅读(122) 评论(0) 推荐(0) 编辑
摘要:二进制 贪心 字典树 阅读全文
posted @ 2018-07-16 19:45 ComplexPug 阅读(2647) 评论(0) 推荐(0) 编辑