poj 2406
来源:互联网 发布:专升本c语言考试大纲 编辑:程序博客网 时间:2024/05/21 10:57
题目链接:http://poj.org/problem?id=2406
Description
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).
Input
Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.
Output
For each s you should print the largest n such that s = a^n for some string a.
Sample Input
abcdaaaaababab.
Sample Output
1
4
3
题意:求子串的循环次数
解决方法:KMP中的覆盖函数
参考文章:http://www.cppblog.com/suiaiguo/archive/2009/07/16/90237.html
AC code:
#include<stdio.h>#include<iostream>#include<cstring>#define M 1000008int next[M];char str[M];int length;void get_next(){int i=0,j=-1;next[0]=-1;while(i<length){ if(j==-1||str[i]==str[j]) {++i;++j;next[i]=j; } else j=next[j];}}int main(){while(scanf("%s",str),str[0]!='.'){length=strlen(str);get_next();int n=length-next[length]; //此为循环节的长度if(next[length]!=0&&length%n==0)printf("%d\n",length/n);elseprintf("1\n");}}
附上变式poj 1961 AC code:
#include<iostream>#include<stdio.h>using namespace std;#define M 1000008int next[M];char str[M];int num;void get_next(){int i=-1;int j=0;next[0]=-1;while(j<num){if(i==-1||str[i]==str[j]){++i;++j;next[j]=i;}elsei=next[i];}}int main(){int t=0;while(scanf("%d",&num),num){ int i,temp; for(i=0;i<num;++i) cin>>str[i]; get_next(); printf("Test case #%d\n",++t); for(i=1;i<=num;++i) {temp=i-next[i];if(i%temp==0&&i!=temp)printf("%d %d\n",i,i/temp); } printf("\n");}}
- POJ 2406
- POJ 2406
- poj 2406
- POJ 2406
- poj 2406
- poj 2406
- poj 2406
- poj 2406
- poj 2406
- poj 2406
- 【POJ 2406 】
- POJ 2406
- poj 2406
- POJ 2406
- poj 2406
- POJ-2406
- POJ 2406
- poj--2406
- ubuntu下使用sqldeveloper界面乱码解决
- redmine 邮箱配置
- U盘装WIN7 安装程序无法创建新的系统分区,也无法定位现有分区
- babyos (一)——利用BIOS 中断INT 0x10显示字符和字符串
- hbase 的regioninfo
- poj 2406
- 很不错的后台界面收集[提供下载]
- 理解游标(2)游标的属性介绍及不同游标类别的案例演示
- Win8风格的Web启动界面
- 设计模式
- 为什么需要编译安装x86和arm版的qt-embedded
- Image is not displaying proper using OpenGL in android ndk
- 多维数据集的主动缓存(Proactive Caching)
- 这几天胃口不错。