poj_1961 Period
来源:互联网 发布:警察局里有编程的吗 编辑:程序博客网 时间:2024/05/16 02:47
http://poj.org/problem?id=1961
分析:
S的长度为i的前缀可以表示成A^K形式,求i和K。KMP中next数组的应用。
Out:
2 2
6 2
9 3
12 4
依次继续,由于整除最后蓝色小块与红色小块会重合,H=T,所以
K=i/(i-next[i]);
2.2 i%(i-next[i])!=0
则由2.1可知随着步骤继续,由于不整除,H和T在在相遇处会有重叠部分也即H!=T.
程序中i!=len是排除K=1的情况,也即next[i]=0的情况。
(个人理解,如果有错还望大家指正~)
代码:
<span style="font-size:14px;">//Period#include <iostream>#include <stdio.h>#include <string>#include <string.h>using namespace std;#define MAXN 1000003int plen;int next[MAXN];char pat[MAXN];void getNext(){ int j=0,k=-1; next[0]=-1; while(j<plen){ while(k>-1 && pat[j]!=pat[k]) k=next[k]; next[++j]=++k; }}int main(){ freopen("in.txt","r",stdin); int n; int cno=1; while(scanf("%d",&n),n){ printf("Test case #%d\n",cno++); scanf("%s",pat); plen=strlen(pat); getNext(); for(int i=1;i<=plen;i++){ int len=i-next[i]; //循环节长度 if(i!=len && i%len==0) //不止一个循环节,因为k>1 printf("%d %d\n",i,i/len); } printf("\n"); } return 0;}</span>
0 0
- poj_1961 Period
- POJ_1961 Period(KMP)
- poj_1961 Period(KMP)
- Period
- Period
- period
- Period
- Period
- Period
- Period
- period
- Period
- Period
- Period
- POJ_1961 KMP next的典型应用 类似于 poj2406
- Posting Period
- hdu1358 Period
- hdu1358 Period
- uva 11922 - Permutation Transformer(伸展树)
- Html(9)CSS设置字体
- js走马灯
- 数据结构(c++)随堂笔记
- 活该
- poj_1961 Period
- HDU 1847 Good Luck in CET-4 Everybody!(巴什博弈论)
- java进阶(六):Java类加载器
- 定时执行任务
- ios项目icon和default图片命名规则
- Linux是如何启动的(面试专题)
- opencv实现字符的垂直投影
- Is Go An Object Oriented Language?
- JSON 之FastJson解析