kmp复健,答案是n-next[n] #include<iostream> #include<cstdio> using namespace std; const int N=1000005; int n,ne[N]; char s[N]; int main() { scanf("%d%s",&n,s+1); int j=0; for(int i=2;i<=n;i++) { while(s[j+1]!=s[i]&&j) j=ne[j…
题意 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. (n<=1000000) 题解 这种求最小循环节的题一般是KMP. 因为有一个很强的结论if(len%(len-nxt[len])==0)那这个字符串的最小环节为len-nxt[len]. 又因为题目说明给出的是有循环节的,所以直接输出len-nxt[len]就行了. #include<iostream> #include<cstring> #include…
自己YY一下可以发现answer =  n - fail[ n ] ----------------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<iostream>   #define rep( i , n ) for( int i = 0 ;…
1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 792  Solved: 535[Submit][Status][Discuss] Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组…
标题效果:给定一个字符串,求最小周期节(不能整除) 示例Hint这是错误的忽略了就好了 环路部分应该是cab 这个称号充分利用KMP在next自然阵列,那是,n-next[n]它表示一个循环节 POJ这个问题需要分割,这是不能分开的标题,直接输出n-next[n]就可以 注意next数组不要开成char~ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #de…
被一个KMP傻题搞蒙圈了,此题AC自动机空间超限,只能用KMP写(我只会AC自动机QAQ)...... AC自动机 Code: // luogu-judger-enable-o2 #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define maxn 1000001 #define idx (p[i]-'a') using namespace std; char s…
Description 一个字符串最短周期. Sol KMP. 最短周期就是 \(n-next[n]\) 证明: 当该字符串不存在周期的时候 \(next[n]=0\) 成立. 当存在周期的时候 \(next[]\) 表示的就是一个和当前后缀相等的前缀,由中间交错的位置可以分别推倒出相邻长度为 \(n-next[n]\) 的子串都相等. 差不多就这样子证吧... Code /*************************************************************…
1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 796  Solved: 538[Submit][Status][Discuss] Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组…
[算法]KMP [题解]KMP中n-next[n]得到最小循环节的性质. 考虑一个循环串(最后一个循环节可能残缺),它最长的[后缀=前缀]一定是以第二个循环节为起始位置的后缀. 正着考虑的话假设后缀T以x+1开始,S为前缀那: 1.S(1~x)=T(1~x)即S(x+1~2x) 2.S(x+1~2x)=T(x+1~2x)即S(2x+1~3x). 这样叠加到最后就是循环串了. 注意: 1.当fail[n]=0的时候,循环节默认为自身要判否. 2.n/(n-fail[n])表示循环次数,不能整除说明…
http://www.lydsy.com/JudgeOnline/problem.php?id=1355 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 964  Solved: 664[Submit][Status][Discuss] Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二…
题目链接:BZOJ - 3942 题目分析 我们发现,删掉一段 T 之后,被删除的部分前面的一段可能和后面的一段连接起来出现新的 T . 所以我们删掉一段 T 之后应该接着被删除的位置之前的继续向后匹配. 那么我们维护一个栈,一直向后匹配,如果栈顶出现了 T ,就弹出 T 个字符,然后继续从新的栈顶向后匹配就可以了. 匹配使用 KMP 算法. 代码 #include <iostream> #include <cstdio> #include <cstring> #inc…
Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 958  Solved: 659[Submit][Status][Discuss] Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成. Output 输出最短的长度 Sample Input 8 cabc…
bzoj 1355: [Baltic2009]Radio Transmission http://www.lydsy.com/JudgeOnline/problem.php?id=1355 Time Limit: 10 Sec  Memory Limit: 64 MB Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符…
将原串看成是循环节的后缀加上若干个循环节,那么考虑每种情况都会发现n-next[n]就是最小循环节.(一开始总输出n...然后发现build_next连调用都没有,%%% #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define REP(i,s,t) for(int i=s;i<=t;i++) const…
问题 L: [KMP]Radio Transmission 题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的.但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入 第一行给出字符串的长度L,第二行给出一个字符串,全由小写字母组成. 输出 输出最短的长度. 样例输入 8 cabcabca 样例输出 3 提示 我们可以利用abc不断自我连接得到abcabcabc,读入的cabcabca是它的子串. 对于全部数据,1≤L≤1e6 [题意]: 题意花里胡哨,其实就是问,最小循环串…
参考博客: BZOJ 3620: 似乎在梦中见过的样子 [KMP]似乎在梦中见过的样子 题目描述 「Madoka,不要相信QB!」伴随着Homura的失望地喊叫,Madoka与QB签订了契约. 这是Modoka的一个噩梦,也同时是上个轮回中所发生的事.为了使这一次Madoka不再与QB签订契约,Homura决定在刚到学校的第一天就解决QB.然而,QB也是有许多替身的(但在第八话中的剧情显示它也有可能是无限重生的),不过,意志坚定的Homura是不会放弃的——她决定消灭所有可能是QB的东西.现在,…
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1794 题目大意: 两个无刻度的钟面,每个上面有N根针(N<=200000),每个针都是相同的,分别指向Ai,Bi(360°被分成360000小份),问能否将其中一个旋转和另一个重合. 题目思路: [KMP][最小表示法] 循环同构问题.可以写KMP,我懒得写KMP了就写了循环同构的最小表示法. 首先将Ai排序,然后求差(记得取模360000,WA了一次),接下来复制一遍开始匹配. A…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5763 题目大意: T组数据,给两个字符串s1,s2(len<=100000),s2可以被解读成2种意思,问s1可以解读成几种意思(mod 1000000007). 题目思路: [动态规划][KMP] 题目有点绕,看看样例就懂了.其实不用KMP直接用substr就能做. 首先不解读成另一个意思的话,f[i]=f[i-1],接着如果当前位置能够与s2匹配,那么f[i]+=f[i-strlen(s2)]…
HDOJ 2203 亲和串 [KMP] Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16573 Accepted Submission(s): 7273 Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判…
[KMP]Censoring 题目描述 Farmer John has purchased a subscription to Good Hooveskeeping magazine for his cows, so they have plenty of material to read while waiting around in the barn during milking sessions. Unfortunately, the latest issue contains a rat…
[KMP]OKR-Periods of Words 题目描述 串是有限个小写字符的序列,特别的,一个空序列也可以是一个串.一个串P是串A的前缀,当且仅当存在串B,使得A=PB.如果P≠A并且P不是一个空串,那么我们说P是A的一个proper前缀.定义Q是A的周期,当且仅当Q是A的一个proper前缀并且A是QQ的前缀(不一定要是proper前缀).比如串abab和ababab都是串abababa的周期.串A的最大周期就是它最长的一个周期或者是一个空串(当A没有周期的时候),比如说,ababab的…
Description The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the little cat to give names to their newly-born babies. They seek the name, and at the same time seek the fame. In order to escape from such b…
Description Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative inte…
Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote from the book: Tout avait Pair normal, mais tout s’affirmait faux. Tout avait Fair normal,…
ZeptoLab Code Rush 2015 D. Om Nom and Necklace [题意] 给出一个字符串s,判断其各个前缀是否是 ABABA…ABA的形式(A和B都可以为空,且A有Q+1个,B有Q个,Q给定). [官方题解] 对于前缀P,我们可以把它拆成P=SSSS…SSSST,其中T是S的前缀.显然可以用KMP算法,时间复杂度是O(n). 当T=S:P=SSS…S.假设S出现了R次.如果转换为ABABAB…ABABA的形式,A和B是由几个S组成,而且最后的A一定是P的一个后缀.由…
[题目大意] 有一个S串和一个T串,长度均小于1,000,000,设当前串为U串,然后从前往后枚举S串一个字符一个字符往U串里添加,若U串后缀为T,则去掉这个后缀继续流程.输出最后的S串. [思路]三天前写过一次,用的是以前的KMP模板,但是觉得太乱了,数组下标一会儿是下标一会儿是长度,傻傻分不清.参照其他人常见的方法重改了一发,算是比较清晰的KMP了,所有数组下标均直接指代字符串下标. 维护两个同进同出的栈,s代表当前的U串,a代表在s串种相应位置时的j指针位于模式串中的下标.每次将匹配串的下…
[题目大意][依然借用别人的概括]给定一个长为L的字符串(L<=100W),求一个num数组,num[i]表示长度为i的前缀中字符串S’的数量,其中S‘既是该前缀的前缀也是该前缀的后缀,且|S'|*2<=i[思路]KMP中next数组的变形.先算一次next数组和dep数组,其中dep数组表示当前前缀经过j=next[j]可以到达-1,这个值其实就是num数组的雏形.然后再进行一次求解next数组,每次前缀不断进行j=next[j],直到满足|S'|*2<=i.此时的dep[j]就是当前…
[JavaScript]Leetcode每日一题-实现strStr() [题目描述] 实现 strStr() 函数. 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始).如果不存在,则返回 -1 . 说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题. 对于本题而言,当 needle 是空字符串时我们应当返回 0 .这与 C 语言的 strstr() 以及 J…
[题意概述] [解题思路] 从左往右找,看有几个匹配的字符串,但要注意例如 aaaaaa  aa的输出是3 而不是5,可以这样理解:画布需要减去,一旦减去也就没有了的 [AC] #include<bits/stdc++.h> using namespace std; ],s[]; ],ans; void GetNext() { Next[] = -; ; ; while (j < pLen ) { //p[k]表示前缀,p[j]表示后缀 || p[j] == p[k]) { ++k; +…
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defin…