zoukankan      html  css  js  c++  java
  • POJ 2406 KMP 循环节

    给一个字符串。求这个串的最小的循环节的长度。

    好像。num = len/(len-next[len]) 就是循环节的长度。如果 len%(len-next[len]) ==0 就是 说字符串长度刚好是循环节长度的整数倍。不然的话。说明没有最小循环节。

    证明嘛。这里好像还是蛮靠谱的。http://blog.csdn.net/euler_m/article/details/6281903

    但是。。还是没有看懂。。~~~~(>_<)~~~~暂且记住吧,,

    附代码;

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 using namespace std;
     5 
     6 #define maxn 1000010
     7 
     8 int next[maxn];
     9 char str[maxn];
    10 int ans[maxn];
    11 
    12 void getNext(char str[]) {
    13      int len=strlen(str+1);
    14      next[1] = 0;
    15      for (int k=0, q=2; q<=len; ++q) {
    16         while(k>0 && str[k+1] != str[q])
    17         k=next[k];
    18         if (str[k+1] == str[q])
    19             k++;
    20         next[q] = k;
    21      }
    22 }
    23 
    24 int main()
    25 {
    26     while(scanf("%s",str+1)!= EOF)
    27     {
    28         if (str[1] == '.') break;
    29         int len = strlen(str+1);
    30         getNext(str);
    31         int flag = len % (len - next[len]);
    32         if (flag != 0) printf("1
    ");
    33         else {
    34             int num = len / (len - next[len]);
    35             printf("%d
    ", num);
    36         }
    37     }
    38     return 0;
    39 }
    View Code
  • 相关阅读:
    tomcat部署https
    Java程序内存的简单分析
    接口设计原则
    英语常用口语
    洛谷 P3956 棋盘
    洛谷 P1101 单词方阵
    二分查找模板(准确找定值)
    洛谷 P1892 [BOI2003]团伙
    浅谈二分的边界问题
    deque简单解析
  • 原文地址:https://www.cnblogs.com/icode-girl/p/4857224.html
Copyright © 2011-2022 走看看