POJ 1961 Period(KMP)
2015-11-06 16:40
330 查看
题目链接:
http://poj.org/problem?id=1961
题目大意:
跟前面那题一样,只是这题要求出这个字符串里面所有的能够组成a^n形式的情况。
思路:
还是应用next数组,对于各种情况可以暴力枚举len,选取符合情况的。
代码:
http://poj.org/problem?id=1961
题目大意:
跟前面那题一样,只是这题要求出这个字符串里面所有的能够组成a^n形式的情况。
思路:
还是应用next数组,对于各种情况可以暴力枚举len,选取符合情况的。
代码:
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; int min(int a,int b) { return a>b?a:b; } int next[1050005],a[1050005],b[1050005]; char s[1050005]; void GetNext(char* p,int next[],int l) { // memset(next,0,sizeof(next)); int pLen = l; next[0] = -1; int k = -1; int j = 0; while (j < pLen ) { //p[k]表示前缀,p[j]表示后缀 if (k == -1 || p[j] == p[k]) { ++j; ++k; next[j] = k; } else { k = next[k]; } } } int main() { int icase=0,l; while(scanf("%d",&l)!=EOF) { if(l==0)break; scanf("%s",s); icase++; if(s[0]=='.')break; int x; x=l; GetNext(s,next,x); int k=1; while(1) { // printf("%d %d\n",next[x],x); if(x%(x-next[x])==0&&next[x]!=0) { a[k]=x; b[k]=x/(x-next[x]); k++; } x--; if(x==0)break; } printf("Test case #%d\n",icase); for(int i=k-1;i>=1;i--) printf("%d %d\n",a[i],b[i]); printf("\n"); } return 0; }
相关文章推荐
- JSP学习
- PrestaShop 网站后台配置(六)
- 从Wordpress迁移到Jekyll
- MySQL Cluster, Fabric, Cobar 三大集群特性对比
- linux服务器备份(python)
- ASP.NET Page 指令
- HTTP中Get与Post的区别
- 概率图几种模型的简介和比较
- 防止用户在页面上填写恶意代码webConfig中所做操作
- Android 内存溢出解决方案(OOM) 整理总结
- FastDFS与Raid思考
- git
- 分享一个 四级联动 数据库
- C#设置WebBrowser默认浏览器
- HTML5 Canvas JavaScript库 Fabric.js 使用经验
- java redis
- 直销你不做,他不做,总有人会做!在中国什么都缺、但往往不缺的就是人 !
- UNIX网络编程(卷I)环境搭建
- 二维数组打印
- java byte大数组按大小拆分小数组