Power Strings

    xiaoxiao2025-05-05  12

    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.

    Hint

    This problem has huge input, use scanf instead of cin to avoid time limit exceed.

    题解

    根据nex数组的定义可以得知字符串1~j与i-j~i完全匹配,则找到离末尾最近的匹配串的长度,用总长除一下就好了

    代码

    var s:ansistring; p:array[0..1000000]of longint; i,ans:int64; procedure init(s:ansistring); var i,j:longint; begin p[1]:=0; j:=0; for i:=2 to length(s) do begin while (s[j+1]<>s[i])and(j>0) do j:=p[j]; if (s[j+1]=s[i]) then inc(j); p[i]:=j; end; end; begin while not eof do begin readln(s); if s='.' then exit; init(s); i:=length(s); ans:=i div(i-p[i]); if i mod (i-p[i])<>0 then ans:=1; writeln(ans); end; end.
    转载请注明原文地址: https://ju.6miu.com/read-1298787.html
    最新回复(0)