首页 > 代码库 > HDU 1358 (所有前缀中的周期串) Period
HDU 1358 (所有前缀中的周期串) Period
题意:
给出一个字符串,在所有长度大于1的前缀中,求所有的周期至少为2的周期串,并输出一个周期的长度以及周期的次数。
分析:
有了上一题 HDU 3746 的铺垫,这道题就很容易解决了
把next求出来,然后逐个判断即可。
1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 1000000 + 10; 5 char p[maxn]; 6 int n, next[maxn]; 7 8 void get_next() 9 {10 int k = -1, j = 0;11 next[0] = -1;12 while(j < n)13 {14 if(k == -1 || p[k] == p[j])15 {16 k++;17 j++;18 next[j] = k;19 }20 else k = next[k];21 }22 }23 24 int main(void)25 {26 //freopen("1358in.txt", "r", stdin);27 int kase = 0;28 while(scanf("%d", &n) == 1 && n)29 {30 memset(next, 0, sizeof(next));31 scanf("%s", p);32 getchar();33 get_next();34 35 printf("Test case #%d\n", ++kase);36 for(int i = 2; i <= n; ++i)37 {38 if(next[i] == 0) continue;39 int cir = i - next[i];40 if(i % cir == 0)41 printf("%d %d\n", i, i / cir);42 }43 puts("");44 }45 46 return 0;47 }
HDU 1358 (所有前缀中的周期串) Period
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。