poj 2046 Power Strings KMP

来源:互联网 发布:wms钢铁加工软件 编辑:程序博客网 时间:2024/06/05 09:09

题目描述

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).

输入

 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.

输出

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

示例输入

abcdaaaaababab.

示例输出

143

提示
#include <stdio.h>#include <string.h>int next[1000002];char s[1000002];int main(){    int i, j, k, len;    while(1)    {        scanf("%s", s);        if (strcmp(s, ".") == 0)            break;        len = strlen(s);        i = 1;        j = 0;        next[0] = 0;        while(i < len)        {            if (j ==0 || s[i] == s[j])            {                i++;                j++;                next[i] = j;            }            else                j = next[j];        }        j = i - next[i];        if (i % j == 0) k = i / j;        else k = 1;        printf("%d\n", k);    }    return 0;}
开始理解错误题意以为当它部分重复出现例如asdfasdffasdfg他会求asdf后来才明白不是这样的

0 0
原创粉丝点击