POJ1961->KMP
来源:互联网 发布:博源基金会 知乎 编辑:程序博客网 时间:2024/05/21 11:22
POJ1961->KMP
题目大意:
给你一个字符串,求他之前大于1的循环节.
比如aabaabaabaab,长度为12.到第二个a时,a出现2次,输出2.到第二个b时,aab出现了2次,输出2.到第三个b时,aab出现3次,输出3.到第四个b时,aab出现4次,输出4
题解:
next数组的运用
KMP的前缀函数处理出来的前缀数组表示当当前字符失配后,要向前调到哪一个位置可以继续匹配。也就是代表着跳到的那个位置之前的所有字符与当前失配字母前的相同数量个字母是相匹配的。
代码:
#include <stdio.h>#include <iostream>#include <string.h>using namespace std ;#define MAX 1000005int next[MAX] ;char word[MAX] ;void kmp_pre(char x[] , int m ,int next[]){ int i , j ; j = next[0] = -1 ; i = 0 ; while(i < m) { if(j == -1 || x[i] == x[j]) next[++i] = ++j ; else j = next[j] ; }}int main(){ int length , l , cas = 1; while(scanf("%d" , &l) , l) { scanf("%s" , word) ; kmp_pre(word , l , next) ; printf("Test case #%d\n", cas++); for(int i = 1 ; i <= l ; i ++) { length = i - next[i] ; if(i != length && i % length == 0) printf("%d %d\n",i , i/length); } printf("\n"); } return 0 ;}
0 0
- poj1961---KMP
- POJ1961->KMP
- 【KMP】 poj1961 Period
- poj1961 Period----KMP
- poj1961 kmp 重复串
- LA3026||poj1961(KMP)
- poj1961之KMP应用
- poj1961 Period (KMP)
- poj1961 KMP
- KMP POJ1961 Period
- [POJ1961]Period(KMP)
- poj1961 Period(KMP)
- kmp练习poj1961
- POJ1961 Period(KMP)
- kmp算法 和例题 poj1961
- poj1961 KMP求循环节
- POJ1961(KMP-Next数组)
- poj1961 KMP(循环节)
- FIR一个免费的App托管平台
- String和StringBuffer的区别
- HDU Problem 2955 Robberies 【01背包】
- java文件读写操作
- 图的深度遍历
- POJ1961->KMP
- 如何干净的清除Slave同步信息(亲测可行)
- JZOJ.4694【NOIP2016提高A组模拟8.14】火神的鱼
- Select2 多选框
- 京城游戏人-Day18: Unity 中如何进行 iOS 内购结果的验证?
- Android在手机内存(/storage/sdcard0)中建目录mkdir(),一直返回失败
- One Bomb
- 数据库基础教程(3):相关理论知识
- jzoj2565 树的序号