HDOJ-3746 利用KMP的fail数组
来源:互联网 发布:iphone进水数据恢复 编辑:程序博客网 时间:2024/06/14 10:48
思路很简单了...就是利用下fail数组的性质...fail[k]的含义是s[0~k]这个字符串的后缀可以是前面哪个串.并且记录的是最长的长度...那么l=len-fail[len]就是一个最短循环节的长度了..那么l-len%l就能得到最少还要补多少位了...值得注意的是
1.fail[len]本身为0..特判: 直接补len位
2.len%l==0..那么答案是0而不是l-0=l..so....特判...
Program:
#include<iostream>#include<stdio.h>#include<string.h>#include<queue>using namespace std;int T,fail[100010],i,j,len,h;char s[100010];int main(){ freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); scanf("%d",&T); while (T--) { scanf("%s",s+1); len=strlen(s+1); fail[0]=fail[1]=0; for (i=2;i<=len;i++) { h=fail[i-1]; while (h && s[h+1]!=s[i]) h=fail[h]; if (s[h+1]!=s[i]) fail[i]=0; else fail[i]=h+1; } if (!fail[len]) i=len; else { h=len-fail[len]; if (len%h==0) i=0; else i=h-len%h; } printf("%d\n",i); } return 0;}
- HDOJ-3746 利用KMP的fail数组
- HDOJ 4763 - Theme Section 利用KMP的fail数组,,很暴力
- 利用kmp里的next数组的一道题
- HDU 3746 Cyclic Nacklace 利用 KMP的next数组求循环节
- KMP算法----利用nextval[]数组
- hud3336 kmp之对next数组的利用
- HDU Cyclic Nacklace (KMP-next数组的利用)
- hdoj-1711Number Sequence(数组Kmp)
- poj 2752 ( fail 数组的理解 )
- 【KMP】 HDOJ 3746 Cyclic Nacklace
- HDOJ Cyclic Nacklace 3746【KMP】
- hdoj 3746 Cyclic Nacklace 【KMP】
- hdu 3746 KMP next数组的应用
- HDU 3746(KMP)next数组的运用
- KMP的next数组
- HDOJ 1358 Period(KMP next数组运用)
- HDOJ 1358.Period(KMP中next数组应用)
- hdoj 1711 Number Sequence【kmp(数字数组)】
- Web自动化测试中针对图片验证码问题的常见解决思路
- Qt之QTcpServer/QTcpSocket简单收发信息(2)
- J2ME 拼图游戏 快速开发 全过程 (一)——开发环境及游戏菜单
- AVD 无法启动
- C++编程思想学习——动态对象创建
- HDOJ-3746 利用KMP的fail数组
- 3dplanesoft 30全套注册码
- AlertDialog教学
- JNI java.lang.UnsatisfiedLinkError
- Centos下安装MySQL全过程(linux下安装MySQL)
- 为什么用IBATIS不用Hibernate及不用JDBC而用IBATIS
- 關於圖片隨著dpi改變
- TCp传输粘包问题
- 百度新闻高级搜索URL中各个参数的意思