标题效果:给定一个字符串,求最小周期节(不能整除) 示例Hint这是错误的忽略了就好了 环路部分应该是cab 这个称号充分利用KMP在next自然阵列,那是,n-next[n]它表示一个循环节 POJ这个问题需要分割,这是不能分开的标题,直接输出n-next[n]就可以 注意next数组不要开成char~ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #de…
自己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. 第二行给出一个字符串,全由小写字母组…
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…
被一个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…
题意 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. (n<=1000000) 题解 这种求最小循环节的题一般是KMP. 因为有一个很强的结论if(len%(len-nxt[len])==0)那这个字符串的最小环节为len-nxt[len]. 又因为题目说明给出的是有循环节的,所以直接输出len-nxt[len]就行了. #include<iostream> #include<cstring> #include…
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. 第二行给出一个字符串,全由小写字母组…
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. 第二…
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…
[算法]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])表示循环次数,不能整除说明…
Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,1 < L ≤ 1,000,000. 第二行给出一个字符串,全由小写字母组成. Output 输出最短的长度 Sample Input 8cabcabca Sample Output 3 HINT 对于样例,我们可以利用"abc"不断自我连接得到"abcabcabc",读入的cabcabc…
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…
标题效果:给定的长度m数字字符串s.求不包括子s长度n数字串的数目 n<=10^9 看这个O(n)它与 我们不认为这 令f[i][j]长度i号码的最后的字符串j位和s前者j数字匹配方案 例如,当s至12312时间 f[i][3]它表示的长度i.123结尾且不包括子串"12312"的方案数 a[x][y]为f[i-1][x]转移至f[i][y]的方案数 换句话说(可能描写叙述不清楚) a[x][y]为s的长度为x的前缀加上一个数字后 后缀能够与最长长度为y的前缀匹配 这个数字能够有…
引用题解:http://blog.csdn.net/wyfcyx_forever/article/details/40347425 #include<cstdio> #include<cstring> using namespace std; int next[1000001],n; char s[1000001]; void GetFail(char P[],int next[]) { next[0]=next[1]=0; for(int i=1;i<n;i++) { in…
题面 Description 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. Input 第一行给出字符串的长度,\(1 < L \le 1,000,000\). 第二行给出一个字符串,全由小写字母组成. Output 输出最短的长度. SampleInput 8 cabcabca SampleOutput 3 Hint 对于样例,我们可以利用"abc"不断自我连接得到"abcabcabc",读…
浅谈\(KMP\):https://www.cnblogs.com/AKMer/p/10438148.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=1355 跟POJ1961类似,答案就是\(n-nxt_n\) 时间复杂度:\(O(n)\) 空间复杂度:\(O(n)\) 代码如下: #include <cstdio> using namespace std; const int maxn=1e6+5; int n; char s…
题面 [题目描述] 对于给定的n个字符串S1,S2--,Sn,标号为1到n,请你找出一个最大的i使得标号小于i的字符串中存在一个不是i的子串. [输入描述]: 第一行包括一个整数t(1<=t<=50)代表测试数据的组数. 对于每组测试数据,第一行一个整数n(1<=n<=2000).接下来n行代表S1,S2--Sn. 所有字符串都是小写字母,字符串长度不超过2000. [输出描述] 对于每组测试数据,输出你能求到的最大标号,如果不存在,输出-1. [样例输入]: 4 5 ab abc…
久仰字符串系列理论 KMP 讲解(引用自bzoj3670动物园) 某天,园长给动物们讲解KMP算法. 园长:“对于一个字符串S,它的长度为L.我们可以在O(L)的时间内,求出一个名为next的数组.有谁预习了next数组的含义吗?” 熊猫:“对于字符串S的前i个字符构成的子串,既是它的后缀又是它的前缀的字符串中(它本身除外),最长的长度记作next[i].” 园长:“非常好!那你能举个例子吗?” 熊猫:“例S为abcababc,则next[5]=2.因为S的前5个字符为abcab,ab既是它的后…
问题 L: [KMP]Radio Transmission 题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的.但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入 第一行给出字符串的长度L,第二行给出一个字符串,全由小写字母组成. 输出 输出最短的长度. 样例输入 8 cabcabca 样例输出 3 提示 我们可以利用abc不断自我连接得到abcabcabc,读入的cabcabca是它的子串. 对于全部数据,1≤L≤1e6 [题意]: 题意花里胡哨,其实就是问,最小循环串…
题目描述 原题来自:BalticOI 2009 给你一个字符串,它是由某个字符串不断自我连接形成的.但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入格式 第一行给出字符串的长度 L,第二行给出一个字符串,全由小写字母组成. 输出格式 输出最短的长度. 样例 样例输入 1 8 cabcabca 样例输出 1 3 样例说明 对于样例,我们可以利用 abc 不断自我连接得到 abcabcabc,读入的 cabcabca 是它的子串. 数据范围与提示 对于全部数据,1≤L≤10^6. 题…
T1 Radio Transmission bzoj 1355 题目大意: 一个字符串,它是由某个字符串不断自我连接形成的 但是这个字符串是不确定的,现在只想知道它的最短长度是多少 思路: kmp 输出n-nxt[n] #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #…
一.介绍 烤馍片KMP算法是用来处理字符串匹配问题的.比如说给你两个字符串A,B,问B是不是A的子串? 比如,eg就是aeggx的子串 一般讲字符串A称为主串,用来匹配的B串称为模式串 定义n为字符串A的长度,m为字符串B的长度(m≤n) 如果用暴力枚举法,时间复杂度为O(NM) 而KMP算法的时间复杂度在最坏的情况下为O(N),十分搞笑高效 ↑如果看到这张图饿了,去吃饭,吃完饭再来学KMP 二.烤馍片的流程 step1:把馍片做出来(要想烤馍片,首先得有馍片可以烤) 假设A=“xzxzxqxz…
[BZOJ1009]GT考试(KMP算法,矩阵快速幂,动态规划) 题面 BZOJ 题解 看到这个题目 化简一下题意 长度为\(n\)的,由\(0-9\)组成的字符串中 不含串\(s\)的串的数量有几个 很显然,如果组成的字符串和\(s\)串做\(KMP\)的匹配的话 是不能匹配到最后一位的 所以,我们想到一个很显然的方程 \(f[i][j]\)表示当前做了第\(i\)位,在\(s\)串中匹配到了第\(j\)位 每次枚举下一位放的数字 以及每一位的位置 相当于做\(KMP\)的匹配 然后进行转移…
[BZOJ3670]动物园(KMP算法) 题面 BZOJ 题解 神TM阅读理解题 看完题目之后 想暴力: 搞个倍增数组来跳\(next\) 每次暴跳\(next\) 复杂度\(O(Tnlogn)\) 算一下,感觉复杂度差不多呀 很果断的交了一发 然后\(80\)分... 暴力代码送上: #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cma…
[BZOJ3670]动物园(KMP算法) 题面 BZOJ 题解 神TM阅读理解题 看完题目之后 想暴力: 搞个倍增数组来跳\(next\) 每次暴跳\(next\) 复杂度\(O(Tnlogn)\) 算一下,感觉复杂度差不多呀 很果断的交了一发 然后\(80\)分... 暴力代码送上: #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cma…
P4391 [BOI2009]Radio Transmission 无线传输 kmp 题目让我们求一个串的最小循环子串 我们回想一下kmp中的失配函数 用 f 数组保存当前字符匹配失败后,需要跳到的前一个匹配字符 而题目说主串是某个子串不断自我连接形成 那么从 子串(长度设为 i )结束的后一个字符开始(i+1), f 数组会递增,每次+1(可以输出看看) 到 f[ n ] 时其实就增加了 n-i 次, f[ n ]=n-i 所以答案即为 n-f[ n ] end. #include<iostr…
目录 写在前面 例题 剪花布条 Radio Transmission OKR-Periods of Words 似乎在梦中见过的样子 Censoring 写在前面 仅为自用,不做推广 一起来看猫片吧! 一篇不错的博客,然而我闷了一下午还是不会,看了看书算是搞懂了 博客里面各种性质讲的非常详细,有空可以回看一下 核心的两段代码 nxt数组预处理: 我这里使用pre表示nxt数组,用go表示要匹配的串 void init(){//预处理pre数组 int len = strlen(go + 1);…
以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说程序实现,思想很简单). 模式匹配的经典应用:从一个字符串中找到模式字串的位置.如“abcdef”中“cde”出现在原串第三个位置.从基础看起 朴素的模式匹配算法 A:abcdefg  B:cde 首先B从A的第一位开始比较,B++==A++,如果全部成立,返回即可:如果不成立,跳出,从A的第二位开…