poj 2406 Power Strings
2015-08-07 15:41
204 查看
题目大意:
输入一个字符串,求该字符串是由多少个子字符串循环形成的,例如输入abcd,则应输出1;输入ababab,结果为3。
解题思路:
利用KMP算法,求出该字符串的P值,即各字符对应的编号,然后根据定理:假设S的长度为len,则S存在循环子串,当且仅当,len可以被len - next[len]整除,最短循环子串为S[len -p[len]],循环次数为len/(len-p[len])。
参考代码:
输入一个字符串,求该字符串是由多少个子字符串循环形成的,例如输入abcd,则应输出1;输入ababab,结果为3。
解题思路:
利用KMP算法,求出该字符串的P值,即各字符对应的编号,然后根据定理:假设S的长度为len,则S存在循环子串,当且仅当,len可以被len - next[len]整除,最短循环子串为S[len -p[len]],循环次数为len/(len-p[len])。
参考代码:
#include<stdio.h> #include<string.h> #define MAX 1000010 char str[MAX]; int p[MAX]; int lens; void getp() { int i=0,j=-1; p[0]=-1; while(i<lens) { if(j==-1||str[i]==str[j]) { i++;j++; p[i]=j; } else j=p[j]; } } int main() { while(scanf("%s",str)!=EOF) { if(!strcmp(str,".")) break; lens=strlen(str); getp(); // if(!lens/(lens-p[lens])) // printf("1\n"); // else printf("%d\n",lens/(lens-p[lens])); } return 0; }
相关文章推荐
- body的margin问题。
- hdu 5362 Just A String 2015多校联合训练赛#6 动态规划
- jQuery.extend 函数详解
- jQuery实现信息提示框(带有圆角框与动画)效果
- Mac版的Android Eclipse识别安卓真机
- ApkTool在Mac上的安装和使用
- SlickEdit 的安装与配置
- Object源码研究2——getClass()方法分析
- HDOJ 2020 绝对值排序 (水)
- WSGI详解汇总
- UIView添加动画
- 创业者靠什么成功?
- IOS第八天(1:UITableViewController团购,数据转模型,xib显示数据)
- Oracle学习之DATAGUARD(五) 创建logic standby
- java 代码中如何预防空指针异常
- 说说SAP Business One怎么样
- 【C++】链表
- Word 中插入 C/C++ 代码(转)
- java基础--集合
- SqlServer中in和exists的区别效率问题