KMP(fail数组应用) LA 3026 Period】的更多相关文章

题目传送门 题意:(训练指南P213) 求每个前缀的最短循环节 分析:利用失配函数的性质,如果i % (i - fail[i]) == 0,那么正好错位移动一个循环节长度. #include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5; char str[N]; int fail[N]; int len; void get_fail(char *P) { int i = 0, j = -1; fail[i] = j; w…
看题传送门:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1027 给定一个长度为n的循环节,求它的每个前缀的最短循环节.换句话说,对于每个i (2<=i<=n),求一个最大的整数K>1(如果k处在),使得s的前i个字符组成的前缀是某个字符串重复K次得到.输出所有存在K的i对应的K. 比如aabaabaab…
这只是蓝书上的一道KMP水题...然后对于最长前缀的循环证明我就不说了... #include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #include<algorithm> #define ll long long #define maxn 1000005 using namespace std; int f[maxn],n; char s[maxn]; in…
Period Problem Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to…
UVAlive 3026 Period 题目: Period   Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive…
[BZOJ 1535] [Luogu 3426]SZA-Template (KMP+fail树+双向链表) 题面 Byteasar 想在墙上涂一段很长的字符,他为了做这件事从字符的前面一段中截取了一段作为模版. 然后将模版重复喷涂到相应的位置后就得到了他想要的字符序列.一个字符可以被喷涂很多次,但是一个位置不能喷涂不同的字符.做一个模版很费工夫,所以他想要模版的长度尽量小,求最小长度是多少. 拿样例来说ababbababbabababbabababbababbaba , 模版为前8个字符abab…
input n 2<=n<=1000000 长度为n的字符串,只含小写字母 output Test case #cas 长度为i时的最小循环串 循环次数(>1) 若没有则不输出 做法:若next数组是连续的整数且next[i]+1是错位部分长度的倍数,则必有循环出现,且循环次数为(i+1)/错位部分长度 #include <cstdio> #include <queue> #include <cstring> #include <iostream…
题意:给定一个长度为n字符串s,求它每个前缀的最短循环节.也就是对于每个i(2<=i<=n),求一个最大整数k>1(如果存在),使得s的前i个字符组成的前缀是某个字符串重复得k次得到的.输出所有的的k和i. 析:首先这是一个KMP的一个题(据大神们说这是一个水题...),首先要对KMP有了解,如果没有了解的先看一下,提供一个地址学习KMP算法, http://www.cnblogs.com/dwtfukgv/articles/5532277.html 对KMP有所了解后,其实这就是一个对…
kmp的代码很短,但是不太容易理解,还是先说明一下这个算法过程吧. 朴素的字符串匹配大家都懂,但是效率不高,原因在哪里? 匹配过程没有充分利用已经匹配好的模版的信息,比如说, i是文本串当前字符的下标,j是要匹配的模版串当前正在匹配的字符的下标.(下标都从零开始,j同时可以表示已经匹配的字符长度) 当匹配到i = 4, j = 4的时候失配了,朴素的匹配做法是往右边移一位然后从j开始扫,这样做效率很低. 不难发现前面已经匹配好的串ab是最长公共前缀后缀.把串移动到后缀的第一个位置正好是 朴素的匹…
题目链接:https://vjudge.net/problem/FZU-1901  Problem 1901 Period II Accept: 575    Submit: 1495Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description For each prefix with length P of a given string S,if S[i]=S[i+P] for i in [0..SIZE(S)-p-…