• POJ 2406 Power Strings KMP


    题意:给你一个字符串,问你最多是由多少段相同的字串构成的

    解题思路:求next指针的思路,我们匹配到 str[len],可以知道,len - str[len]  是他的循环节,再判断能不能整除就行了。

    解题代码:

     1 // File Name: 2406.cpp
     2 // Author: darkdream
     3 // Created Time: 2014年09月09日 星期二 20时15分59秒
     4 
     5 #include<vector>
     6 #include<list>
     7 #include<map>
     8 #include<set>
     9 #include<deque>
    10 #include<stack>
    11 #include<bitset>
    12 #include<algorithm>
    13 #include<functional>
    14 #include<numeric>
    15 #include<utility>
    16 #include<sstream>
    17 #include<iostream>
    18 #include<iomanip>
    19 #include<cstdio>
    20 #include<cmath>
    21 #include<cstdlib>
    22 #include<cstring>
    23 #include<ctime>
    24 #define LL long long
    25 
    26 using namespace std;
    27 int next[1000005];
    28 char str[1000005];
    29 int len ; 
    30 void knext()
    31 {
    32    memset(next,0,sizeof(next));
    33    int j = 0 ; 
    34    int k = -1;
    35    next[0] = -1;
    36    while(j <= len )
    37    {
    38        if(k == -1 || str[j] == str[k]){
    39          j ++ ; 
    40          k ++ ;
    41          next[j] = k ; 
    42        }else{
    43          k = next[k];
    44        }
    45    }
    46   /* for(int i = 0 ;i <= len ;i ++)
    47        printf("%d ",next[i]);
    48    printf("
    ");*/
    49    int t = next[len];
    50    if((len % (len -t) == 0 ) && (t % (len -t) == 0 ))
    51        printf("%d
    ",len/(len-t));
    52    else printf("1
    ");
    53 }
    54 int main(){
    55    while(scanf("%s",str) != EOF)
    56    {
    57       len = strlen(str);
    58       if(len ==  1 && str[0] == '.')
    59           break;
    60       knext();  
    61    }
    62 return 0;
    63 }
    View Code
    没有梦想,何谈远方
  • 相关阅读:
    Objective-C Runtime 运行时之四:Method Swizzling
    App启动加载广告页面思路
    关于CoreData和SQLite多线程访问时的线程安全问题
    HIVE学习(待更新)
    流处理环境搭建
    CAJ2PDF
    ArcMap加载在线地图
    学习opencv(持续更新)
    风险和策略(待更新)
    区块链入门教程(转)
  • 原文地址:https://www.cnblogs.com/zyue/p/3963369.html
Copyright © 2020-2023  润新知