• pku1961 Period


    求一个字符串中每一个前缀用s’^k(k>1)表示的所有情况。要求输出该前缀的结束位置和k值。

    和2406有基本相同的方法,求出next数组后枚举i,看(1-i) mod(i-next[i])是否大于1,满足条件就输出即可。

    View Code
     1 program pku1961(input,output);
    2 var
    3 n : longint;
    4 ch : char;
    5 s : ansistring;
    6 next : array[0..1000100] of longint;
    7 i,j : longint;
    8 cases : longint;
    9 begin
    10 readln(n);
    11 cases:=0;
    12 while n<>0 do
    13 begin
    14 inc(cases);
    15 s:='';
    16 for i:=1 to n do
    17 begin
    18 read(ch);
    19 s:=s+ch;
    20 end;
    21 readln;
    22 fillchar(next,sizeof(next),0);
    23 j:=0;
    24 next[1]:=0;
    25 for i:=2 to length(s) do
    26 begin
    27 while (j>0)and(s[i]<>s[j+1]) do
    28 j:=next[j];
    29 if s[i]=s[j+1] then
    30 inc(j);
    31 next[i]:=j;
    32 end;
    33 writeln('Test case #',cases);
    34 for i:=2 to length(s) do
    35 if ((i mod (i-next[i]))=0)and((i div (i-next[i]))>1) then
    36 writeln(i,' ',i div (i-next[i]));
    37 writeln;
    38 readln(n);
    39 end;
    40 end.



  • 相关阅读:
    servlet中Cookie的编码问题
    servlet关于转发用法
    eclipse界面更改为黑色
    猜字符小游戏——可以设置等级
    uva 10655
    uva11029
    UVA11388 GCD LCM1 2 -1
    uva 11609
    poj 2436
    poj 2431
  • 原文地址:https://www.cnblogs.com/neverforget/p/2413880.html
Copyright © 2020-2023  润新知