[poj2406]Power Strings(kmp求最小循环节)
来源:互联网 发布:ipaf看书软件 编辑:程序博客网 时间:2024/05/18 01:55
题目描述
传送门
题解
最小循环节=长度-末位失配
条件:1、末位失配的长度大于等于整个字符串长度的一半;
2、循环节长度可以被字符串长度整除。
假设黑色的部分为原始的字符串,蓝色的部分为末位失配,红色的部分为长度-末位失配,我们可以知道相同颜色的部分分别对应相等,意思类推,得出上面的结论。
但是要注意判断循环节长度能否被总长度整除。这道题的话直接判断能否整除不判断失配长度是否超过一半其实也是可以过的,因为如果失配长度不超过一半,总长度-失配长度一定超过一半,那么一定不能整除,循环节还是为它本身。
代码
#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int max_W=1000005;char W[max_W];int T[max_W],len,mid,ans;inline void calc_T(){ T[0]=-1; int j; for (int i=0;i<len;++i){ j=T[i]; while (j!=-1&&W[i]!=W[j]) j=T[j]; T[i+1]=++j; }}int main(){ while (gets(W)){ len=strlen(W); if (len==1&&W[0]=='.') break; memset(T,0,sizeof(T)); calc_T(); if (len%2==0) mid=len/2; else mid=len/2+1; if (T[len]>=mid&&len%(len-T[len])==0) ans=len/(len-T[len]); else ans=1; printf("%d\n",ans); }}
0 0
- poj2406--Power Strings(KMP求最小循环节)
- [poj2406]Power Strings(kmp求最小循环节)
- (POJ2406)Power Strings <KMP算法求最小循环节>
- poj2406 Power Strings(kmp求最小循环节)
- 【KMP求最小循环节】POJ2406 Power Strings
- poj2406 Power Strings(kmp求循环节)
- 【poj2406】 Power Strings (KMP求循环节)
- poj2406(KMP 求循环节的个数)Power Strings --
- POJ2406-Power Strings(kmp循环节)
- POJ2406 Power Strings(KMP,循环节)
- 【POJ2406】Power Strings(KMP与最小循环节的故事)
- POJ 2406 Power Strings(KMP求最小循环节)
- poj2406——Power Strings(KMP循环节)
- poj2406--Power Strings(kmp:求循环串的次数)
- POJ 2406 Power Strings KMP 求最小循环节
- KMP + 求最小循环节 --- POJ 2406 Power Strings
- 【poj 2406】 Power Strings 【KMP 求最小循环节】
- POJ2406 Power Strings KMP-next数组的循环节
- leetcode--Reverse Integer
- The Swift Programming Language学习笔记 (二)——基础部分
- cudnn 安装说明
- 霍夫变换检测直线--原理和Matlab实现
- [POJ 1741]Tree
- [poj2406]Power Strings(kmp求最小循环节)
- How to reboot the system by apk
- ZOJ1074
- linux下测试python程序执行时间
- 文章标题
- 蓝桥杯 PREV-31 小朋友排队
- Matlab中的函数句柄@
- 二分图常见建边方法
- BZOJ_P2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)