KMP
文章平均质量分 58
字符串---KMP
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
acwing 1052 设计密码
题面题解(DP状态机+KMP)KMP匹配过程: 对于模板串我们先提前预处里出ne数组,然后在匹配的时候,如果当前位置的模式串和模板串匹配,那么指针向后移动,如果当前当前位置的模式串和模板串不匹配,我们就要将模板串的指针移动到 ne[j] 的位置继续匹配,当 j 移动到模板串最后的位置(等于模板串的长度),就说明匹配成功,模板串是模式串的字串对于这道题,要设计出只包含小写字母长度位N并且不含子串T的模式串S,那么我们可以先处理T串的ne数组,对于S来说,要想满足条件,那么在匹配的过程中,最终是原创 2021-04-05 10:24:14 · 288 阅读 · 1 评论 -
算法进阶指南---0x18(KMP)匹配统计
原题链接题解hash前面已经讲过了,我们再用KMP做一下,对于KMP我们先要了解ne数组:next[i]=j 以i为终点的后缀和从1开始的非平凡前缀最大重合是j我们先对B预处理出ne,然后对A进行匹配 for (int i = 1, j = 0; i <= n; i++) { while (j && a[i] != b[j + 1]) j = ne[j]; if (a[i] == b[j + 1]) j++;原创 2021-03-02 18:36:30 · 165 阅读 · 0 评论 -
算法竞赛进阶指南---0x18(KMP)Milking Grid
题面题解对于求一个最小覆盖矩阵,我们可以横纵分开来求,先看横向,对于每行,我们直接暴力枚举循环节长度,判断每一行是否符合,最后得到一个横向的最小循环节长度(width)对于纵向,我们就可以将每一行看作是一个字母,然后进行纵向的KMP,求出ne数组,那么n-ne[n] 就是最小循环节长度(heigth)解释1:为什么求出最小的横向循环节就能得到最后最小的面积,而不是让width 大点,heigth小点,因为如果让width大点,那么只会在求纵向KMP的时候,不同的字符串更多,所求原创 2021-02-25 23:34:17 · 212 阅读 · 0 评论 -
acwing 831 KMP字符串
题面题解KMP 模板题 ,next[i]=j 以 i 为终点的后缀和从1开始的非平凡前缀最大重合是 j ,下标从1开始代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;const int N = 1e6 + 10;int n, m;char s[原创 2021-02-09 17:38:42 · 345 阅读 · 0 评论 -
中北大学2020年新生赛 白嫖怪Long Long (KMP)
原题链接题意Long Long准备去吃串串,刚好发现串串店正在搞活动,只要能帮店主解决一个问题,这一顿就可以白嫖。作为白嫖怪,Long Long怎么能错过这次机会,但是他是一个字符串渣渣,现在需要你来帮他解决。由于他十分着急吃串串,他只给你1s的时间解决这个问题。问题是这样的:店主十分喜欢回文串(正着读和反着读都一样的字符串),比如 “nucun”,“acmmca” 这样的都是回文串,现在店主随机给你出两个字符串a和b,如果b串是回文串,求出a串中b串出现的个数和出现的所有位置。要求你写一个程序可以解原创 2020-12-19 19:50:46 · 411 阅读 · 2 评论 -
算法竞赛进阶指南---0x15 (KMP) Period
题面题解首先要知道KMP的 ne[i]=j 以i为终点的后缀和从1开始的前缀最大重合是j(蓝色部分的长度)我们可以发现,区间1和区间2,3的字符串是相等的,然后继续划分,使 1 = 4 ,然后 自然 4 = 5 ,5 = 6 ,6 = 7 …一直这样划分,就可以划分出长度为 i -ne[i] 的区间 满足循环循环长度已经确定,怎样保证它就是最小的呢(只有区间长度最小,才能划分出更多),如果这个长度不是最小,还可以更小,那么这个子字符串的ne[i]就会相应的增大,就互相矛盾我们原创 2021-01-30 23:09:48 · 190 阅读 · 0 评论