POJ 1961 Period || HDU 1358 Period || ZOJ 2177 Period
来源:互联网 发布:传奇盛世翅膀数据7到8 编辑:程序博客网 时间:2024/05/17 16:00
/*
给定一个长度为n的字符串s,求它的每个前缀的最短循环节。换句话说,对于每个i (2<=i<=n),
求一个最大的整数K>1 (如果K存在),使得S的前i个字符组成的前缀是某个字符串重复K次得到
的。输出所有存在K的i和对应的K。
给定一个长度为n的字符串s,求它的每个前缀的最短循环节。换句话说,对于每个i (2<=i<=n),
求一个最大的整数K>1 (如果K存在),使得S的前i个字符组成的前缀是某个字符串重复K次得到
的。输出所有存在K的i和对应的K。
比如对于字符串aabaabaabaab, 只有当i=2,6,9,12时K存在,且分别为2,2,3,4
用的 是很不常见的 MP 算法(其实就是个状态转移图的构造)
*/
Problem : 1358 ( Period ) Judge Status : Accepted
RunId : 7623334 Language : C++ Author : CherryChou
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
RunId : 7623334 Language : C++ Author : CherryChou
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
#include<functional>#include<algorithm>#include<iostream>#include<fstream>#include<sstream>#include<iomanip>#include<numeric>#include<cstring>#include<cassert>#include<cstdio>#include<string>#include<vector>#include<bitset>#include<queue>#include<stack>#include<cmath>#include<ctime>#include<list>#include<set>#include<map>using namespace std;const int MAXN=1000015;char T[MAXN];int F[MAXN]; void getfail(char *P,int *f)// MP算法{ f[0]=f[1]=0; int m=strlen(P); for(int i=1;i<m;i++){ int j=f[i]; while(j&&P[i]!=P[j]) j=f[j]; f[i+1]=(P[i]==P[j]?j+1:0); }}int main(){ int len,cnt=0; while(~scanf("%d%*c",&len),len){ printf("Test case #%d\n",++cnt); scanf("%s",T); getfail(T,F); for(int i=2;i<=len;i++){ if(F[i]>0&&i%(i-F[i])==0){ printf("%d %d\n",i,i/(i-F[i])); } } puts(""); } return 0;}
Source Code
Problem: 1961 User: imutzcyMemory: 5028K Time: 188MSLanguage: C++ Result: Accepted- Source Code
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1000000 + 10;char str[maxn];int next[maxn];int n;void get_next(){int j,k;j=0;k=-1;next[0]=-1;while(str[j]!='\0'){if(k==-1||str[j]==str[k]){j++;k++;if(j%(j-k)==0&&j/(j-k)>1) printf("%d %d\n",j,j/(j-k));next[j]=k;}else k=next[k];}}int main(){int text=0;while(~scanf("%d",&n),n){scanf("%s",str);printf("Test case #%d\n",++text);get_next();printf("\n");}return 0;}
- POJ 1961 Period || HDU 1358 Period || ZOJ 2177 Period
- Period (poj 1961&&hdu 1358)KMP
- POJ 1961 && HDU 1358 Period(kmp)
- Period
- Period
- period
- Period
- Period
- Period
- Period
- period
- Period
- Period
- Period
- zoj 2177 Period (KMP )
- POJ 1961 Period
- poj 1961 Period
- POJ 1961 Period
- staruml之 第二章 基本概念
- 包含可执行文件。出于安全性考虑,Gmail 不允许发送这类文件
- HDOJ 1014 Uniform Generator
- staruml之 第三章 管理项目
- Apache:系统找不到指定的文件: No installed service named"Apache2"
- POJ 1961 Period || HDU 1358 Period || ZOJ 2177 Period
- android ICS2 google帐户的联系人无法搜索出来问题
- zju2008欧拉回路
- 关于java读取远程文件时网络超时判断
- Tomcat下JNDI数据源配置-----Druid
- Unicode编码及其实现:UTF-16、UTF-8,and more
- AlertDialog 使用总结
- 兼容各个浏览器的字体阴影的实现
- 百度谷歌搜索引擎高级指令