Pagini recente » Cod sursa (job #1389518) | Cod sursa (job #2055970) | Cod sursa (job #106978) | Cod sursa (job #574152) | Cod sursa (job #2227266)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
const int NMAX = 16500;
const int INF = (1<<30);
const int baza = 33;
char c[NMAX];
int v[NMAX];
int main()
{
int n,k;
fin >> n >> k;
fin >> (c+1);
int st=0,dr=n+1;
int mij;
bool ok=0;
long long x=0,p=1;
int K=0;
int rasp=0;
while(st<=dr)
{
mij=(st+dr)/2;
p=1;
x=0;
for(int i=1;i<=mij;i++)
{
x=x*baza+(c[i]-'0');
if(i>=2)
{
p*=baza;
}
}
for(int i=0;i<=n+1;i++)
{
v[i]=0;
}
K=0;
c[n+1]='0';
for(int i=mij+1;i<=n+1;i++)
{
v[++K]=x;
x=x-(c[i-mij]-'0')*p;
x=x*baza+(c[i]-'0');
}
sort(v+1,v+K+1);
v[K+1]=INF;
ok=0;
int apar=0;
for(int i=1;i<=K;i++)
{
if(v[i]==v[i+1])
apar++;
else apar=1;
if(apar>=k)
ok=1;
}
if(ok==1)
{
st=mij+1;
rasp=mij;
}
else dr=mij-1;
}
fout << rasp;
return 0;
}