zoukankan      html  css  js  c++  java
  • pku2406 Power Strings

    有一个字符串,长度在1000000以内,求它最大的链节个数,即把s表示成s'+s'+s'······。求s'的个数。

    用KMP的思想,求出next数组,然后可以用手画方法发现从next[length(s)]到length(s)间的字符串可以不断向前推,只要这个长度能被总长度整除,它就是最大链节长度,否则就是1.

    View Code
     1 program pku2406(input,output);
    2 var
    3 i,j : longint;
    4 s : ansistring;
    5 next : array[0..1200000] of longint;
    6 begin
    7 readln(s);
    8 while s<>'.' do
    9 begin
    10 j:=0;
    11 next[1]:=0;
    12 for i:=2 to length(s) do
    13 begin
    14 while (s[i]<>s[j+1])and(j>0) do
    15 j:=next[j];
    16 if s[i]=s[j+1] then
    17 inc(j);
    18 next[i]:=j;
    19 end;
    20 if (length(s) mod (length(s)-next[length(s)])=0) then
    21 writeln((length(s) div (length(s)-next[length(s)])))
    22 else
    23 writeln(1);
    24 readln(s);
    25 end;
    26 end.



  • 相关阅读:
    Java通过stream将list转换成map
    Java 标记接口
    Java的LinkedList
    Java中的数组
    Java的异常
    初识lambda
    Combining a Collection of Predicates
    重载
    svm资料收集
    向量空间及其他相关数学结构
  • 原文地址:https://www.cnblogs.com/neverforget/p/2413835.html
Copyright © 2011-2022 走看看