HDOJ 1358 Period
来源:互联网 发布:linux tar命令安装 编辑:程序博客网 时间:2024/06/06 00:58
Period
TimeLimit: 2000/1000 MS (Java/Others) Memory Limit:65536/32768 K (Java/Others)
Total Submission(s): 8090 Accepted Submission(s): 3893
Problem Description
For each prefix of a given string S with N characters (each character has an ASCIIcode between 97 and 126, inclusive), we want to know whether the prefix is aperiodic string. That is, for each i (2 <= i <= N) we want to know thelargest K > 1 (if there is one) such that the prefix of S with length i canbe written as AK , that is A concatenated K times, for some stringA. Of course, we also want to know the period K.
Input
The input file consists of several test cases. Each test case consists of twolines. The first one contains N (2 <= N <= 1 000 000) – the size of thestring S. The second line contains the string S. The input file ends with aline, having the number zero on it.
Output
For each test case, output “Test case #” and the consecutive test case number on asingle 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; theprefix sizes must be in increasing order. Print a blank line after each testcase.
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 <bits/stdc++.h>using namespace std;#define mst(a,b) memset((a),(b),sizeof(a))#define f(i,a,b) for(int i=(a);i<(b);++i)typedef long long ll;const int maxn= 1000005;const int mod = 475;const ll INF = 0x3f3f3f3f;const double eps = 1e-6;#define rush() int T;scanf("%d",&T);while(T--)int n;char s[maxn];int nex[maxn];void getnext(){ int i=0,j=-1; nex[0]=-1; while(i<n) { if(j==-1||s[i]==s[j]) nex[++i]=++j; else j=nex[j]; }}void KMP(){ getnext(); for(int i=2;i<=n;i++) { int k=i-nex[i]; if(i%k==0&&i/k>1) { printf("%d %d\n",i,i/k); } }}int main(){ int cas=1; while(~scanf("%d",&n)&&n) { scanf("%s",s); printf("Test case #%d\n",cas++); KMP(); printf("\n"); } return 0;}
- HDOJ 1358 Period
- 【KMP】 HDOJ 1358 Period
- HDOJ Period 1358【KMP】
- HDOJ 1358 Period
- HDOJ 1358 Period
- HDOJ 1358 Period
- HDOJ 题目1358 Period(kmp)
- hdoj-【5908 Abelian Period】
- 【HDOJ】5908 Abelian Period
- HDOJ 1358 Period(KMP next数组运用)
- 1358 Period
- POJ 1961 Period || HDU 1358 Period || ZOJ 2177 Period
- HDU 1358 Period (KMP)
- HDU 1358 Period
- hdu 1358 Period
- hdu 1358 Period
- HUD 1358 Period
- Period 1358 KMP
- vue2.0 Render函数 Render具体能做点什么 Render应用场景 Render在.vue无法使用
- 悼念512汶川大地震遇难同胞——老人是真饿了
- Ue4 BluePrint蓝图实现镜头(视角)切换及摆动范围(二)
- 调用方法
- Hibernate入门01_HelloWord
- HDOJ 1358 Period
- java int转byte出现负数 byte转int的解决
- Hive 安装 干货
- <安全牛>我们今天的网络安全问题源自1648年,其实我觉得其实早在资治通鉴上的中国法家们已经表示同样想法
- 大数据存储系统(2)--- Key-Value Store
- Python中IOBase详解
- 计算机组成原理——指令系统
- STM32-printf重定向到USART
- 提取人脸敏感区域并保存成图像