首页 > 学院 > 开发设计 > 正文

|poj 2406|KMP|Power Strings

2019-11-11 05:10:01
字体:
来源:转载
供稿:网友

poj传送门 可以知道,在一个字符串里的最短周期是ms=n−f[i], 其中f是kmp中的失配函数。 如果ms|n, 那么输出n/ms, 否则输出1.

#include<cstdio> #include<algorithm> #include<cstring> #define ms(i,j) memset(i,j, sizeof i); using namespace std;const int MAXN = 1000000 + 5;int n;char s[MAXN];int f[MAXN];int main() { while (scanf("%s", s)&&(s[0]!='.')) { n = strlen(s); f[0] = f[1] = 0; for (int i=1;i<n;i++) { int j = f[i]; while (j && s[i]!=s[j]) j = f[j]; f[i+1] = (s[i]==s[j]) ? (j+1) : (0); } int ans = n-f[n]; if (n%ans==0) ans = n/ans; else ans = 1; PRintf("%d/n", ans); } return 0; }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表