poj1961 Period

毒瘤题。

我可不是在说这个题目毒瘤,我是在说编译和评测毒瘤...

它不用函数抽象出求next就会T,用了函数就A了,让我怀疑poj的评测机歧视我。

以及之前一题用函数就WA,不用就A,实在是...

我们仔细分析题目,发现在每个i处若(i + 1)能被(i - j)整除就ok

然后就随手敲代码出来咯,然后被poj的神奇网络卡了几天...

 1 #include <cstdio>
 2 const int N = 1000010;
 3 /// poj 1961
 4 /// Period
 5 int nex[N], n;
 6 char s[N];
 7 inline void getnext() {
 8     nex[0] = 0;
 9     for(int i = 1, j = 0; i < n; i++) {
10         while(j && s[i] != s[j]) {
11             j = nex[j - 1];
12         }
13         if(s[i] == s[j]) j++;
14         nex[i] = j;
15     }
16     return;
17 }
18 int main() {
19     int T = 0;;
20     while(scanf("%d", &n)) {
21         if(!n) break;
22         scanf("%s", s);
23         printf("Test case #%d\n", ++T);
24         //printf("%s ", s);
25         getnext();
26         for(int i = 2; i <= n; i++) {
27             int j = nex[i - 1];
28             if(j && (i % (i - j) == 0)) {
29                 printf("%d %d\n", i, i / (i - j));
30             }
31         }
32         puts("");
33     }
34     return 0;
35 }
AC代码

 

posted @ 2018-05-23 18:05  garage  阅读(82)  评论(0编辑  收藏  举报