UVA1328 Period

Posted lipeiyi520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA1328 Period相关的知识,希望对你有一定的参考价值。

题目传送门

解题思路:

这道题其实就是求一个字符串的所有前缀及其本身的循环节(如果有),思路同另一道题.

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 
 5 using namespace std;
 6 
 7 int n,tot,_next[1000001],j;
 8 string l,p;
 9 
10 int main() {
11     while(true) {
12         tot++;
13         scanf("%d",&n);
14         if(n == 0) return 0;
15         cin >> p;
16         l = " " + p;
17         j = 0;
18         memset(_next,0,sizeof(_next));
19         _next[1] = 0;
20         for(int i = 2;i <= n; i++) {
21             while(j != 0 && l[i] != l[j+1]) j = _next[j];
22             if(l[i] == l[j+1]) j++;
23             _next[i] = j;
24         }
25         printf("Test case #%d
",tot);
26         for(int i = 2;i <= n; i++) {
27             int u = i - _next[i];
28             if(i % u == 0 && i != u)
29                 printf("%d %d
",i,i / u);
30         }
31         printf("
");
32     }
33     return 0;
34 }

 

以上是关于UVA1328 Period的主要内容,如果未能解决你的问题,请参考以下文章

UVa 1328 Period

uva 1328(kmp)

uva1371Period (二分+DP)

2019年7月做题记录

poj1328 贪心

1328破坏回文串