题目大意:给你一些串,问如果想让这个串里面的循环节至少循环两次,需要添加几个字符(只能在最前面或者最后面添加).比如ababc 需要添加5个就是添加ababc. 分析:其实字符串的长度len-next[len] = 最小循环节长度,为什么?其实也是需要对next的深刻了解,首先我们都知道next是求的最大的前缀和后缀的匹配度比如下面的字符串 ABCABCABC,很直接的就可以看出来最大的匹配串是ABCABC,但怎么从这个看出来最小的循环节呢?我们看到这个串的后缀串是从第4个字符开始的,也就是说从…
Cyclic Nacklace HDU 3746 KMP 循环节 题意 给你一个字符串,然后在字符串的末尾添加最少的字符,使这个字符串经过首尾链接后是一个由循环节构成的环. 解题思路 next[len]-len的差即是循环部分的长度. 这个是重点.这个题目自己开始没有想明白,看的博客,推荐这个. 代码实现 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const i…
http://acm.hdu.edu.cn/showproblem.php?pid=3746 Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4498    Accepted Submission(s): 2051 Problem Description CC always becomes very dep…
Cyclic Nacklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 15406    Accepted Submission(s): 6419 Problem Description CC always becomes very depressed at the end of this month, he has checke…
CC这个月底总是很郁闷,昨天他查了他的信用卡,没有任何意外,只剩下99.9元了.他很苦恼,想着如何度过这最后的几天.受"HDU CakeMan"企业家精神的启发,他想卖一些小东西来赚钱.当然,这并非易事.圣诞节就要到了,男孩们都忙着挑选圣诞礼物送给女朋友.人们认为,链手镯是一个很好的选择.然而,事情并不总是那么简单,众所周知,女孩喜欢用五颜六色的装饰来使手镯显得生动活泼,同时她们也想展示自己作为大学生成熟的一面.CC了解了女孩们的需求后,打算出售这款名为CharmBracelet的ch…
题目大意 给出字符串,寻找最小要补全的字符个数,使得字符串是两次的循环 解法 通过寻找规律,我们又发现了len-next[len]又派上了用场 ①如果next[len]是0,说明最大前缀后缀和为0,那么这个串里面没有什么重复的那种部分,也就是输出len例如abcde ②如果len%(len-next[len])==0也就是说里面已经具有这种重复两次的串了,所以输出0,例如aaa ③如果上述情况都不是,那么说明这个串里面包含重复部分但是不全.那么输出的公式是(len-next[len[)-len%…
<题目链接> 题目大意: 给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数. [>>>kmp next函数 kmp的周期问题]  #include <cstdio> #include <cstring> + ; char s[maxn]; int Next[maxn]; void get_next() { , k = -; Next[] = -; while (s[j]) { || s[j] == s[k]) Next[++j] =…
题意: 给出一个字符串,要求在后面添加最少的字符是的新串是循环的,且至少有两个循环节.输出最少需要添加字符的个数. 分析: 假设所给字符串为p[0...l-1],其长度为l 有这样一个结论: 这个串的最小循环节为 l - next[l] 感觉自己想得不是特别透彻,所以把别人的博客贴上来吧. 里面有个小错误就是:next[i]的值应该为j-k 对于这种情况还可以这样想: |←②→|←④→| ------------------------ ------------------------ |←①→…
做一个高产的菜鸡 传送门:HDU - 3374 题意:多组输入,给你一个字符串,求它最小和最大表示法出现的位置和次数. 题解:刚刚学会最大最小表示法,amazing.. 次数就是最小循环节循环的次数. #include<bits/stdc++.h> using namespace std; int nt[1000100],b[1000100]; char a[1000100]; void kmp_nt(int m) { int i,j; i = 0; nt[0] = j =-1; while(…
<题目链接> 题目大意: 意思是,从第1个字母到第2字母组成的字符串可由某一周期性的字串(“a”) 的两次组成,也就是aa有两个a组成: 第三行自然就是aabaab可有两个aab组成: 第四行aabaabaab可由三个aab组成: 第五行aabaabaabaab可有四个aab组成 解题分析: 求字符串的前缀是否为周期串,若是,打印循环节的长度及循环次数: #include <cstdio> #include <cstring> ; char s[M]; int nxt[…