zoukankan      html  css  js  c++  java
  • ( KMP 求循环节的个数)Power Strings -- poj -- 2406

    链接:

    http://poj.org/problem?id=2406

    Power Strings
    Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u
    Submit Status

    Description

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).

    Input

    Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.

    Output

    For each s you should print the largest n such that s = a^n for some string a.

    Sample Input

    abcd
    aaaa
    ababab
    .
    

    Sample Output

    1
    4
    3
    

    Hint

    This problem has huge input, use scanf instead of cin to avoid time limit exceed.
     
    代码:
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    #define N 1000007
    
    char S[N];
    int Next[N];  
    
    /// Next中存的是前缀和后缀的最大相似度
    
    void FindNext(int Slen, int Next[]) ///Next[i] 代表前 i 个字符的最大匹配度
    {
        int i=0, j=-1;
        Next[0] = -1;
    
        while(i<Slen)
        {
            if(j==-1 || S[i]==S[j])
                Next[++i] = ++j;
            else
                j = Next[j];
        }
    }
    
    int main()
    {
        while(scanf("%s", S), strcmp(S, "."))
        {
            int Slen=strlen(S);
    
            FindNext(Slen, Next);
    
            if(Slen%(Slen-Next[Slen]))
                printf("1
    ");
            else
                printf("%d
    ", Slen/(Slen-Next[Slen]));
        }
    
        return 0;
    }
    View Code
     
    勿忘初心
  • 相关阅读:
    Linux下使用rm删除文件,并排除指定文件
    使用use index优化sql查询
    PHP面试中经常出现的composer 问题总结
    MySQL全局锁库锁表
    《MySQL必懂系列》全局锁、表级锁、行锁
    Redis面试题(2020最新版)
    What is stabs?
    链接与加载
    MachO之Segment初探
    为什么要在预编译头中加__OBJC__?
  • 原文地址:https://www.cnblogs.com/YY56/p/4833391.html
Copyright © 2011-2022 走看看