POJ 2406 Power Strings
来源:互联网 发布:js array push index 编辑:程序博客网 时间:2024/06/14 04:12
题意:对于两个字符串a,b,定义a*b是将两个字符串a,b连结起来。同时定义a^n: a^0 = ""(空串),a^n = a ^ (n-1) * a;
问题:给定字符串s,判断s是否是a^n的形式。如果是输出最大的n
思路:利用KMP算法可以求出最短循环节。在KMP算法中,f[i]表示当前位置的字符失配后,向前跳转到的字符的位置。所以,如果一个字符串是幂的形式,对于最后一个字符, i - f[i]就是他的最小循环节。(想一下为什么。)因为字符串是幂的形式,那答案n = length / (i - f[i]);同时,如果不能整除,也说明无法表示成幂的形式。
代码如下:
#include <cstdio>#include <cstring>using namespace std;const int MAX = 1001000;char str[MAX];int f[MAX];int main(void){ while(scanf("%s",str), str[0] !='.'){ int n = strlen(str); f[0] = f[1] = 0; for(int i = 1; i < n; ++i){ int j = f[i]; while(j && str[i] != str[j]) j = f[j]; f[i+1] = str[i] == str[j]? j+1:0; } int len = n - f[n]; //printf("%d\n",len); if(n % len == 0) printf("%d\n",n / len); else printf("1\n"); }}
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
- javascript Date format(js日期格式化)
- GPU编程之CUDA(二)——配置方法
- sicily 1193
- Hadoop2.4.1 hadoop dfs(fs)指令大全
- Oracle数据库共享连接和专用连接方式比较
- POJ 2406 Power Strings
- HDU 4939 Stupid Tower Defense (DP)
- 红黑树的基本原理
- Java异常种类
- 分页语句的深入研究
- pkg_resources.DistributionNotFound: pip==0.8.2
- iOS app发现严重BUG后的紧急处理
- cocos2d-x3.2用游戏截屏功能提取 Flappy Bird 资源中的单张图片
- matlab学习------输入对话框inputDlg,目录选择对话框uigetdir,列表选择对话框listdlg