POJ 2406 Power String 最短循环子串
来源:互联网 发布:手机淘宝 代理 编辑:程序博客网 时间:2024/05/18 00:04
传送门
题目大意:求循环子串的最短循环节。
题解:首先注意到如果他是循环子串那么n-next[n]一定是最小循环节。
于是可以先求出nxt然后暴力匹配一遍看看。
但是事实上只要满足n%(n-next[n])==0就可以保证答案正确了。可以用类似递归的方式证明。
代码:
#include<iostream>#include<cstdio>#include<cstring>#define MAXN 1000010using namespace std;int nxt[MAXN];char s[MAXN];int get_nxt(char *s,int n){nxt[1]=0;for(int i=2;i<=n;i++){int j=nxt[i-1];while(j&&s[j+1]!=s[i]) j=nxt[j];if(s[j+1]==s[i]) j++;nxt[i]=j;}return 0;}int main(){s[0]='#';while(scanf("%s",s+1)!=EOF){int n=strlen(s)-1;if(n==1&&s[1]=='.') break;get_nxt(s,n);int k=n-nxt[n];if(n%k) printf("1\n");else printf("%d\n",n/k);}return 0;}
阅读全文
0 0
- POJ 2406 Power String 最短循环子串
- poj 2406 最短循环周期
- POJ 2406 Power String
- POJ 2406 - Power String
- poj 2406 Power Strings 【KMP求最小循环节】【后缀数组求连续重复子串】
- POJ 2406 Power Strings——kmp求最短循环子串
- 【坑爹卡时题】Poj 2406 Power String
- POJ 2406 Power String(KMP)
- poj 2406 Power String (KMP)
- POJ 2406 Power Strings(KMP:找串循环节)
- poj 2406 Power Strings(连续重复子串)
- POJ 2406 Power Strings(后缀数组[连续重复子串])
- POJ - 2406 Power Strings (KMP循环节)
- POJ 2406 Power Strings(循环节)
- POJ - 2406 Power Strings(KMP 循环节)
- POJ 2406 Power Strings [KMP+循环节]
- POJ 2406 Power Strings(KMP循环节)
- poj 2406 Power Strings【kmp循环节】
- 第一章 大神归位
- 解决问题最简单的方法
- 第二章 求生之路
- linux系统中如何进入退出vim编辑器
- 简单的高性能后台架构
- POJ 2406 Power String 最短循环子串
- Android—高级控件(一)自动完成文本框,下拉列表
- C语言从txt文件的数据保存到二维数组
- Django之models
- 对QT中connect函数的认识
- opencv 图像的膨胀和腐蚀(一)
- centos7.3+nginx1.8+php7.1+mysql5.7 安装(准备工作)
- csuoj1060: Nearest Sequence 动态规划
- fullPage.js