Pagini recente » Cod sursa (job #154514) | Cod sursa (job #2445018) | Cod sursa (job #759460) | Cod sursa (job #2465788) | Cod sursa (job #2185656)
#include <bits/stdc++.h>
#define Nmax 16390
#define base1 27
#define base2 5
#define base3 7
#define MOD1 100007
#define MOD2 100021
#define MOD3 666013
using namespace std;
ifstream f("substr.in");
ofstream g("substr.out");
char s[Nmax];
int H1[MOD1+5];
int H2[MOD2+5];
int H3[MOD3+5];
int n,k,hash1,hash2,hash3,p1,p2,p3;
bool is_good(int len)
{
memset(H1,0,sizeof(H1));
memset(H2,0,sizeof(H2));
memset(H3,0,sizeof(H3));
hash1=hash2=hash3=0;
p1=p2=p3=1;
int i;
for(i=1;i<=len;i++)
{
hash1=(hash1*base1+s[i])%MOD1;
hash2=(hash2*base2+s[i])%MOD2;
hash3=(hash3*base3+s[i])%MOD3;
if(i>1)
{
p1=(p1*base1)%MOD1;
p2=(p2*base2)%MOD2;
p3=(p3*base3)%MOD3;
}
}
++H1[hash1];
++H2[hash2];
++H3[hash3];
for(i=len+1;i<=n;i++)
{
hash1=((hash1-(p1*s[i-len])%MOD1+MOD1)*base1+s[i])%MOD1;
hash2=((hash2-(p2*s[i-len])%MOD2+MOD2)*base2+s[i])%MOD2;
hash3=((hash3-(p3*s[i-len])%MOD3+MOD3)*base3+s[i])%MOD3;
++H1[hash1];
++H2[hash2];
++H3[hash3];
if(H1[hash1]>=k and H2[hash2]>=k and H3[hash3]>=k) return true;
}
return false;
}
int main()
{
f>>n>>k;
f>>(s+1);
int lo=1,hi=n,mid,ans=1;
while(lo<=hi)
{
mid=(lo+hi)>>1;
if(is_good(mid))
{
ans=mid;
lo=mid+1;
}
else hi=mid-1;
}
g<<ans;
return 0;
}