Description
给一个字符串找到长度为n的不同子串的个数。
Sample Input
3 4
daababac
Sample Output
5
思路
为了不让子串重复,转化为nc进制或者mod一个玄学的系数存入hash表中。
const
h=1000007;
var
a,b:array[1..h] of longint;
l,i,n,nc,x,j,ans,sum:longint;
s:string;
begin
readln(n,nc);
readln(s);
l:=length(s);
for i:=1 to l do
if a[ord(s[i])-65]=0 then
begin
inc(x);
a[ord(s[i])-65]:=x;
end;
for i:=1 to l-n+1 do
begin
sum:=0;
for j:=i to n+i-1 do
sum:=sum*nc+a[ord(s[j])-65];
sum:=sum mod h;
if b[sum]=0 then
begin
inc(ans);
b[sum]:=1;
end;
end;
writeln(ans);
end.