![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
KMP与匹配
Cyhlnj
这个作者很懒,什么都没留下…
展开
-
CODEFORCES 25E Test
题意三个字符串,找一个字符串(它的子串含有以上三个字符串)使它的长度最短,输出此字符串的长度。题解直接KMP两个匹配,拼接即可。。。先枚举排列,取最小值。。*常数巨大的丑陋代码# include <stdio.h> # include <stdlib.h> # include <iostream> # include <string.h> # include <algorithm> using na原创 2017-07-24 21:28:17 · 280 阅读 · 0 评论 -
[POI2010]CHO-Hamsters
KMP暴力求出next数组后 实际上是一个最短路问题,floyed搞一搞 然而会TLE 矩阵优化一下即可(倍增floyed) KMP在弱数据下可以AC。。正解请看其他人博客# include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h> # defi原创 2017-12-12 19:31:29 · 331 阅读 · 0 评论 -
Bzoj3670: [Noi2014]动物园
题面 传送门 Sol 这是一道阅读理解题,读了好久才明白意思。。。 首先可以想到处理出next数组,每次的位置i跳next跳到长度小于i的一半位置,然后继续跳到零统计此时跳的次数就是答案 那么暴力就是O(n2)O(n^2) 让我们一起膜拜yyb大佬的倍增跳next 那么优化就是在求next的时候再开一个指针,每次强制跳到i的一半的位置。。。 再开数组cnt,每次由nex原创 2018-01-18 14:09:05 · 207 阅读 · 0 评论 -
Bzoj1009: [HNOI2008]GT考试
题面 传送门 Sol 设f[i][j]f[i][j]表示到第ii个数,最后jj个为不吉利数字的前缀的方案数 于是就可以写一个KMPKMP套暴力DPDP跳nextnext转移 # include # define RG register # define IL inline # define Fill(a, b) memset(a, b, sizeof(a)) using na原创 2018-01-19 17:36:41 · 192 阅读 · 0 评论 -
CF528D Fuzzy Search
题意 有两个基因串SSS和TTT,他们只包含AGCTAGCTAGCT四种字符。 现在你要找出TTT在SSS中出现了几次。 有一个门限值k≥0k≥0k≥0 只要T[i]T[i]T[i]和S[j−k]S[j−k]S[j-k]到S[j+k]S[j+k]S[j+k]有相同的,就视为匹配 (1≤|T|≤|S|≤200000,0≤k≤200000)(1≤|T|≤|S|≤200000,0≤k≤200...原创 2018-05-31 12:27:04 · 568 阅读 · 0 评论 -
Bzoj4259: 残缺的字符串
题面 没有权限号的我当然选择luogu Sol 假设没有通配符 那么把TTT翻转 设f[i]=∑j+k=i[S[k]==T[j]]f[i]=∑j+k=i[S[k]==T[j]]f[i]=\sum_{j+k=i}[S[k]==T[j]] 如果f[i]f[i]f[i]为000则iii之前的一一匹配 那么可以给每个字符一个权值 重新定义f[i]=∑j+k=i(S[k]−T[j])2f...原创 2018-05-31 12:26:58 · 209 阅读 · 0 评论 -
BZOJ5372: PKUSC2018神仙的游戏
传送门 Sol 自己还是太 naivenaivenaive 了,上来就构造多项式和通配符直接匹配,然后遇到 borderborderborder 相交的时候就 gggggg 了 神仙的游戏蒟蒻还是玩不来 一个小小的性质: 存在长度为 lenlenlen 的 borderborderborder 的充要条件是 ∀i,si=sn−len+i\forall i,s_i=s_{n-len+i}∀i,si...原创 2018-12-01 22:44:10 · 206 阅读 · 0 评论 -
CF954I Yet Another String Matching Problem
传送门 Sol 考虑如何计算两个等长串的距离 相当于两个匹配的字符之间连边,同一个连通块内可以互相转化,答案就是并查集合并的次数 本题的字符集大小只有 666,那么考虑枚举两种字符匹配连边 匹配就是一个非常套路的反转 +++ FFTFFTFFT 了 # include &lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; ...原创 2018-12-13 16:57:02 · 337 阅读 · 0 评论 -
UOJ#172. 【WC2016】论战捆竹竿
传送门 首先这个题目显然就是先求出所有的 borderborderborder,问题转化成一个可行性背包的问题 一个方法就是同余类最短路,裸跑 303030 分,加优化 505050 分 首先有个性质 borderborderborder 分成的等差数列的个数不超过 logloglog 和回文树的性质的证明类似瞎画图一下就行了 我们注意到可以一个一个等差数列的更新最短路 要做到这个,必须能从之前的...原创 2019-01-15 09:22:52 · 379 阅读 · 0 评论