题目: | Power Strings | |
来源: | Pku 2406 | |
题目大意: | 求字符串的最多可能有多少个重复串组成 | |
数据范围: | 据说字符串很长开个ansistring然后数组狠开吧 | |
样例: | abcd aaaa ababab . | 1 4 3 |
做题思路: | 牛说是kmp,第一眼我只看到是字符串,最终研究出是kmp,原来p数组有这么强大 的作用。 | |
知识点: | Kmp |
var
p:array[0..1000000]of longint;
s:ansistring;
procedure work;
var
i,j:longint;
begin
fillchar(p,sizeof(p),0);
j:=0;
fori:=2 to length(s) do{<自己和自己匹配>}
begin
while (j>0)and(s[j+1]<>s[i])do j:=p[j];
ifs[j+1]=s[i] then inc(j);
p[i]:=j;
end;
if(length(s) mod(length(s)-p[length(s)])=0)and(length(s)<>(length(s)-p[length(s)]))then
writeln(length(s) div (length(s)-p[length(s)])){<p数组的应用使得求解方便得很。>}
elsewriteln(1);
end;
begin
readln(s);
whiles<>'.' do
begin
work;
readln(s);
end;
end.
题目来源:
http://poj.org/problem?id=2406