
KMP
Lynstery
一只蒟蒻
展开
-
[矩阵乘法+KMP] BZOJ1009: [HNOI2008]GT考试
题意阿申准备报名参加GT考试,准考证号为N位数X1X2….Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字。 他的不吉利数学A1A2…Am(0<=Ai<=9)有M位,不出现是指X1X2…Xn中没有恰好一段等于A1A2…Am。可以有前导0。 求不出现不吉利的数字的方案数。 N<=1e+9 M<=20题解考虑到之前求方案数比较难求,肯定需要递推求解。 注意到在准考证号中找不吉利数字有原创 2017-02-20 19:57:07 · 866 阅读 · 0 评论 -
KMP——模板整理
用于字符串匹配问题。 时间复杂度O(n+m)#include<cstdio>#include<cstring>char a[100005],b[100005];int nxt[100005],len1,len2;void make_nxt(){ nxt[1]=0; int j=0; for(int i=2;i<=len2;i++){ while(j&原创 2017-02-21 19:55:59 · 506 阅读 · 0 评论 -
[KMP fail树] 51nod1277 字符串中的最大值
题意对于一个字符串 SS,定义 SS 的一个前缀的权值为:前缀长度×\times 在S中的出现次数。求最大权值。 题解failfail 树的简单运用。 一个点所代表的前缀的出现次数=在 failfail 树上以这个点为根的子树大小。 #include<cstdio>#include<cstring>#include<algorithm>using namespace std;const原创 2017-08-02 00:05:57 · 444 阅读 · 0 评论 -
[KMP fail树] BZOJ3670: [Noi2014]动物园
题目要求的 numinum_i 就等于 failfail 树中 ii 的满足编号 ≤⌊i2⌋ \le \lfloor \frac i 2\rfloor 的祖先的最大深度。 如何求 numinum_i 呢?其实暴力一点的话把 failfail 树建出来倍增肯定是可以的。实际上可以做到线性。 求 numinum_i 可以用类似求 nxtnxt 数组的方法,应该有 numi+1<=numi+1num_原创 2017-11-02 22:22:19 · 324 阅读 · 0 评论 -
[KMP] Codeforces #631D. Messenger
首先要把相同的缩到一起,然后考虑就是一个简单的匹配。 注意到b串两端的字符在a串里匹配可能比a串里那一块少。解决办法就是先把b的两端扣掉匹配,每次匹配成功时判断一下就好了。#include<cstdio>#include<algorithm>#define Fir first#define Sec second#define mp(x,y) make_pair(x,y)using nam原创 2017-10-26 16:40:16 · 368 阅读 · 0 评论