UVa 1328 Period
2016-05-09 23:47
423 查看
数据范围较大,故用KMP求循环节 之后由小到大枚举长度范围,若该长度下有循环节就输出答案 还要注意输出格式。之前测试时候连着一串presentation error也是悲伤 #include<bits/stdc++.h> using namespace std; char c[1000500]; int ne[1000500]; int n; void kmp(char s[]){ ne[0]=0;//题目要求最小循环长度为2 ne[1]=0; int i,j; for(i=1;i<n;i++){ j=ne[i]; while(j && c[i]!=c[j])j=ne[j]; if(c[i]==c[j])j++; ne[i+1]=j; } return; } int main(){ int T=1; while(scanf("%d",&n) && n){ printf("Test case #%d\n",T++); scanf("%s",c); kmp(c); int i; for(i=2;i<=n;i++){//查找循环节 if(ne[i] && i%(i-ne[i])==0) printf("%d %d\n",i,i/(i-ne[i])); } printf("\n"); } return 0; }
相关文章推荐
- C#集合2
- 《疯狂java讲义》第四章五子棋思考
- UVa 1328 Period
- 1-1 求N!
- The Definitive Antlr 4 第4章学习笔记
- App接口设计思路
- 当删除线遇到适配器时出现的问题
- 类加载的三个准备工作
- POJ 2752 (KMP)
- Crazy tea party
- 【Java】关于Java中参数传递方式与C++的比较
- HDU 2076 夹角有多大(题目已修改,注意读题)
- 浏览器的重绘与重排
- eclipse/Android Studio无法识别魅族手机
- JavaScript:Object类型
- PHP 快速实现数组去重
- Android之bitmap压缩的几种方法的解读
- 如何做好接口测试?
- IKAnalyzer分词技术
- 将自己的代码托管到github