Pagini recente » Istoria paginii runda/becreative4 | Clasament uyi | Clasament becreative24 | Borderou de evaluare (job #2969439) | Cod sursa (job #3239981)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
long long int cod[300], baza=67, f[20005], MOD=1e9+7, has;
map<int, int> M;
char x[20005];
int n, k;
int OK(int v)
{M.clear();
has=0;
for(int i=1;i<=n;i++)
{has=(has*baza+cod[int(x[i])])%MOD;
if(i>=v)
{M[has]++;
if(M[has]>=k)return 1;
has=has-(f[v-1]*cod[int(x[i-v+1])])%MOD;
has+=MOD, has%=MOD;
}
}
return 0;
}
int main()
{ f[0]=1;
for(int i=1;i<=20000;i++)
f[i]=(f[i-1]*baza)%MOD;
int st, dr, mij, sol;
fin>>n>>k;
for(int i=1;i<=n;i++)
fin>>x[i];
for(int i=1;i<=9;i++)
cod[int('0'+i)]=i;
for(int i='A';i<='z';i++)
cod[i]=i-'A'+10;
st=1, dr=n, sol=0;
while(st<=dr)
{mij=(st+dr)/2;
if(OK(mij))sol=mij, st=mij+1;
else dr=mij-1;
}
fout<<sol;
return 0;
}