思路:

最小循环节的解释在这里,有人证明了那么就很好计算了

之前对KMP了解不是很深啊,就很容易做错,特别是对fail的理解

注意一下这里getFail的不同含义

代码:

#include<iostream>
#include<algorithm>
const int N = 1000000+5;
const int INF = 0x3f3f3f3f;
using namespace std;
int fail[N];
char p[N],t[N];
void getFail(){
fail[0] = -1;
int j = 0,k = -1;
int len = strlen(p);
while(j <= len){ //给等号
if(k == -1 || p[j] == p[k]){
if(p[++j] == p[++k])
fail[j] = fail[k];
else
fail[j] = k;
}
else{
k = fail[k];
}
}
}
int KMP(){
int num = 0;
getFail();
int i = 0,j = 0;
int lent = strlen(t),lenp = strlen(p);
while(i < lent){
if(j == -1 || t[i] == p[j]){
i++;
j++;
if(j == lenp) num++;
}
else{
j = fail[j];
}
}
return num;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%s",p);
getFail();
int len = strlen(p);
int c = len - fail[len]; //最小循环节
if(len % c == 0){
if(len == c) printf("%d\n",c);
else printf("0\n");
}
else{
printf("%d\n",c - len%c);
}
}
return 0;
}

HDU 3746 Cyclic Nacklace(KMP+最小循环节)题解的更多相关文章

  1. HDU 3746 Cyclic Nacklace (KMP求循环节问题)

    <题目链接> 题目大意: 给你一个字符串,要求将字符串的全部字符最少循环2次需要添加的字符数. [>>>kmp next函数 kmp的周期问题]  #include &l ...

  2. hdu 3746 Cyclic Nacklace(kmp最小循环节)

    Problem Description CC always becomes very depressed at the end of this month, he has checked his cr ...

  3. hdu 3746 Cyclic Nacklace (KMP求最小循环节)

    //len-next[len]为最小循环节的长度 # include <stdio.h> # include <algorithm> # include <string. ...

  4. HDU 3746 Cyclic Nacklace(kmp next数组运用)

    Cyclic Nacklace Problem Description CC always becomes very depressed at the end of this month, he ha ...

  5. HDU 3746 Cyclic Nacklace (KMP找循环节)

    题目链接:HDU 3746 Sample Input 3 aaa abca abcde Sample Output 0 2 5 Author possessor WC Source HDU 3rd & ...

  6. HDU 1358 Period(KMP+最小循环节)题解

    思路: 这里只要注意一点,就是失配值和前后缀匹配值的区别,不懂的可以看看这里,这题因为对子串也要判定,所以用前后缀匹配值,其他的按照最小循环节做 代码: #include<iostream> ...

  7. hdu 3746 Cyclic Nacklace KMP循环节

    Cyclic Nacklace 题意:给一个长度为Len( 3 <= Len <= 100000 )的英文串,问你在字符串后面最少添加几个字符可以使得添加后的串为周期串? Sample I ...

  8. HDU 3746 Cyclic Nacklace KMP

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3746 KMP算法—— AC代码: #include <iostream> #include ...

  9. HDU 3746 Cyclic Nacklace(KMP找循环节)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题目大意:给你一个字符串,求出将字符串的最少出现两次循环节需要添加的字符数. 解题思路: 这题需 ...

随机推荐

  1. eclipse 64和32位切换

    JAVA_HOME配置的是JAVA_HOME=D:\Java\32\jdk1.6.0_13

  2. JavaScript中通过arguments对象实现对象的重载

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. [vue]vue-cli下载原理

    正常vue-cli这样操作就ok了 vue-cli github $ npm install -g vue-cli $ vue init webpack my-project $ cd my-proj ...

  4. dedecms开启报错

    php.ini里面设置display_errors = On 开启错误提示,error_reporting = E_ALL & ~E_NOTICE 设置错误等级.也可以在php文件中ini_s ...

  5. JQuery Form AjaxSubmit(options)在Asp.net中的应用注意事项

    所需引用的JS: 在http://www.malsup.com/jquery/form/#download 下载:http://malsup.github.com/jquery.form.js 在ht ...

  6. http://ttaa.210997.com/恶意修改主页

    嗯,,,,之前似乎写过关于篡改主页的文章. 但今天下了个游戏,然后不小心又出现了这个问题. 我先用原始的方式检测了一下(比如检索注册表之类的),但这个不奏效. 省略一些查看问题的方式. 最终得出:新的 ...

  7. 完整table

    .table-bordered{ border:1px solid #cccccc; } .table { border-spacing: 0;/*设置或检索当表格边框独立时(即border-coll ...

  8. Hive 常用函数汇总

    Hive内部提供了很多函数给开发者使用,包括数学函数,类型转换函数,条件函数,字符函数,聚合函数,表生成函数等等,这些函数都统称为内置函数. 目录 数学函数 集合函数 类型转换函数 日期函数 条件函数 ...

  9. WireShark 基本介绍

    文中内容主要转自:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 一.Wireshark 与 Fiddler 比较: F ...

  10. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...