zoukankan      html  css  js  c++  java
  • poj 2406

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

    Power Strings
    Time Limit: 3000MS   Memory Limit: 65536K
    Total Submissions:66981   Accepted: 27644

    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<cstdio>
    #include<cstring>
    const int maxn=1e7+3;
    int len;
    int next[maxn];
    char str[maxn];
    void getnext(){
        int k=-1;
        int j=0;
        next[0]=-1;
        while(j<len){
            if(k==-1||str[j]==str[k]){
                k++;
                j++;
                next[j]=k;
            }else{
                k=next[k];
            }
        }
        return;
    }
    int main(){
        while(scanf("%s",str)&&str[0]!='.'){
            len=strlen(str);
            getnext();
             int tmp=len-next[len];
            if(len%tmp!=0){
                printf("1
    ");
            }else{
                printf("%d
    ",len/tmp);
            }
        }
        return 0;
    }
     
  • 相关阅读:
    vue-cli工具搭建vue-webpack项目
    关于闭包的理解
    运动-分页
    运动-无缝滚动
    运动-手风琴
    运动-模拟返回顶部
    运动—图片中心放大
    运动—运动框架
    webstorm 激活破解
    let和const
  • 原文地址:https://www.cnblogs.com/qqshiacm/p/11443798.html
Copyright © 2011-2022 走看看