POJ 2406Power Strings
来源:互联网 发布:手机淘宝店铺关注链接 编辑:程序博客网 时间:2024/06/03 17:14
2016暑期集训7-A
POJ 2406 Power Strings
kmp变形,next数组的应用
传送门:关于kmp算法
传送门:POJ
传送门:HustOJ
题意
给一字符串,寻找最小的循环节最多循环多少次才能构成这个字符串。输出次数。
比如‘aaaa’由4个‘a’构成,循环节出现4次;‘abababababab’最短循环节‘ab’出现6次。
思路
kmp中的next数组作用就是找循环节,把题给字符串当成匹配字符串,kmp[n]表示前面多少个字符平移后与后面的相同,搞一搞就是循环节长度,就是k/(k-ne_xt[k-1])。
代码
#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <algorithm>#include <stack>#include <vector>using namespace std;const int MAXN=1000007;const int oo=999999999;const long long int loo=10000000000000000ll;char P[MAXN];int ne_xt[MAXN];void getNext()//kmp求next{ int q,k; int m=strlen(P); ne_xt[0]=0; for(q=1,k=0; q < m; ++q) { while(k > 0 && P[q] != P[k]) k=ne_xt[k-1]; if(P[q] == P[k]) { k++; } ne_xt[q]=k; }}int main(){ memset(P,0,sizeof(P)); while(~scanf("%s",P)) { if(strcmp(P,".")==0) { return 0; } memset(ne_xt,0,sizeof(ne_xt)); int k=strlen(P); getNext(); if((k%(k-ne_xt[k-1]))==0) { printf("%d\n",k/(k-ne_xt[k-1])); } else { printf("1\n"); } memset(P,0,sizeof(P)); }}
0 0
- poj 2406 "Power Strings"
- poj 2406 Power Strings
- POJ-2406 Power Strings
- POJ 2406 Power Strings
- poj 2406 Power Strings
- POJ:2406 Power Strings
- poj 2406 Power Strings
- poj 2406 Power Strings
- poj 2406 Power Strings
- POJ 2406 Power Strings
- POJ 2406 - Power Strings
- poj 2406 Power Strings
- poj 2406 Power Strings
- POJ 2406 Power Strings
- POJ 2406 Power Strings
- POJ 2406 Power Strings
- poj 2406 Power Strings
- POJ 2406 Power Strings
- “C++的数组不支持多态”?
- Lync 2013边缘服务器部署6—导入证书
- 如何画功能稳定,美观的PCB?
- XAMPP Apache配置
- Lync 2013边缘服务器部署5—向CA申请证书
- POJ 2406Power Strings
- H5中使用JS实现简易日历
- Java编程思想学习笔记(五) 第6章 访问权限控制
- redis3.2.2单机集群搭建
- Lync 2013边缘服务器部署4—生成证书申请文件
- 近实时运算的利器---presto在公司实践
- Lync 2013边缘服务器部署3—安装LYNC边缘
- CodeForces 370D Broken Monitor
- Lync 2013边缘服务器部署2—配置拓扑