• POJ 2406


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

     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.

    ________________________________________________________________________________________________________________________

    题目大意:给定字符串,问字符串由几个相同的部分组成?

    if(字符串长度%(字符串长度-字符串最后一个字符的next[])==0),相同部分的长度为:字符串长度-字符串最后一个字符的next[]

    在做这个题目时处理低级失误,把长度L定义成了char,找了一个多小时,哎……,笨的要死了!

    ________________________________________________________________________________________________________________________

     1 #include<cstdio>
     2 #include<cstring>
     3 
     4 using namespace std;
     5 const int maxl=1000010;
     6 char s[maxl];
     7 int next[maxl],l;
     8 void getnext()
     9 {
    10     next[0]=-1;
    11     for(int j,i=1;i<l;i++)
    12     {
    13         j=next[i-1];
    14         while(s[j+1]!=s[i] && j>=0)j=next[j];
    15         next[i]=s[j+1]==s[i]?j+1:-1;
    16     }
    17 }
    18 int main()
    19 {
    20     while(~scanf("%s",s) )
    21     {
    22         if(s[0]=='.')break;
    23         l=strlen(s);
    24         getnext();
    25         if(l%(l-next[l-1]-1)==0)printf("%d
    ",l/(l-next[l-1]-1));
    26         else printf("1
    ");
    27     }
    28     return 0;
    29 }
    View Code
  • 相关阅读:
    教你如何在 Visual Studio 2013 上使用 Github
    如果你也会C#,那不妨了解下F#(1):F# 数据类型
    博客园主题美化
    适配器模式 实战
    mysql in 超过1000 解决方案
    shell: 循环日期+1
    sqoop export 报错:Got exception running Sqoop: org.kitesdk.data.DatasetNotFoundException: Descriptor location does not exist:
    git 回滚到执行版本,并推送到远程分支
    hive表增加字段,并指定字段位置
    微信抢红包架构设计
  • 原文地址:https://www.cnblogs.com/gryzy/p/6531340.html
Copyright © 2020-2023  润新知