HDU-1358 Period(kmp专题)
2016-07-27 11:43
387 查看
E - Period
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit Status Practice HDU
1358
Description
For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the
largest K > 1 (if there is one) such that the prefix of S with length i can be written as A K , that is A concatenated K times, for some string A. Of course, we also want to know the period K.
Input
The input file consists of several test cases. Each test case consists of two lines. The first one contains N (2 <= N <= 1 000 000) – the size of the string S. The second line contains the string S. The input file ends with a line,
having the number zero on it.
Output
For each test case, output “Test case #” and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the
prefix sizes must be in increasing order. Print a blank line after each test case.
Sample Input
3
aaa
12
aabaabaabaab
0
Sample Output
Test case #1
2 2
3 3
Test case #2
2 2
6 2
9 3
12 4
求前缀周期,kmp的简单应用
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit Status Practice HDU
1358
Description
For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the
largest K > 1 (if there is one) such that the prefix of S with length i can be written as A K , that is A concatenated K times, for some string A. Of course, we also want to know the period K.
Input
The input file consists of several test cases. Each test case consists of two lines. The first one contains N (2 <= N <= 1 000 000) – the size of the string S. The second line contains the string S. The input file ends with a line,
having the number zero on it.
Output
For each test case, output “Test case #” and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the
prefix sizes must be in increasing order. Print a blank line after each test case.
Sample Input
3
aaa
12
aabaabaabaab
0
Sample Output
Test case #1
2 2
3 3
Test case #2
2 2
6 2
9 3
12 4
求前缀周期,kmp的简单应用
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<limits.h> #include<math.h> #include<algorithm> using namespace std; int n,m,k,cases=0; char a[1000005]; int p[1000005]; void print() { int i,j=0; p[1]=0; for(i=2;i<=n;i++) { while(j>0 && a[i]!=a[j+1]) j=p[j]; if(a[j+1]==a[i]) j++; p[i]=j; } printf("Test case #%d\n",++cases); int x; for(i=1;i<=n;i++) { x=i%(i-p[i]); if(x==0 && p[i]>=1) printf("%d %d\n",i,i/(i-p[i])); } puts(""); } int main() { int i,j; while(scanf("%d",&n),n!=0) { k=0; scanf(" %s",a+1); print(); } }
相关文章推荐
- C++ 网络编程 数据结构 面试题罗列
- Kafka JAAS Plain SASL 安全认证配置
- Android自定义ListView并且适配
- 将两个整型数组有序合并成一个数组
- 完全分布式Hadoop 调用DFS上so文件做缓存分发 跑mr
- ∵∵∵∵不开心∵∵∵∵
- session有效时间
- 杭电1045解题报告
- jquery代码素材-16素材网
- Yii框架连接mongodb数据库的代码
- 【02】KVM中小企业实践-宿主机安装
- android_API -- Android 包的分类
- 公司POS系统服务器感言
- mysql用户和权限
- leetcode-Search Insert Position
- MySQL配置文件详解
- linux 查看分区是ext3还是ext4
- Java数据持久层框架 MyBatis之API学习十(Logging详解)
- java 学习
- boost asio学习笔记1--Reactor与Proactor模式