Pagini recente » Cod sursa (job #297843) | Cod sursa (job #1582766) | sim03 | Monitorul de evaluare | Cod sursa (job #1147064)
#include <cstdio>
#include <tr1/unordered_map>
#define Nmax 17000
#define X 64
using namespace std;
int N,K;
char a[Nmax];
tr1::unordered_map <int,int> H;
inline bool Ok(int L)
{
int v=0,aux=1,i,cnt=0;
H.clear();
for(i=1;i<L;++i)
aux=aux*X;
for(i=1;i<=L;++i)
v=v*X+a[i]-'0';
H[v]=1;
for(i=L+1;i<=N;++i)
{
v=((v-(a[i-L]-'0')*aux))*X+a[i]-'0';
++H[v];
}
tr1::unordered_map <int,int>::iterator it;
for(it=H.begin();it!=H.end();++it)
cnt=max(cnt,it->second);
if(cnt>=K)
return true;
return false;
}
int main()
{
int st,dr,mij,sol;
freopen ("substr.in","r",stdin);
freopen ("substr.out","w",stdout);
scanf("%d%d%s", &N,&K,(a+1));
st=1; dr=N;
while(st<=dr)
{
mij=(st+dr)/2;
if(Ok(mij))
{
sol=mij;
st=mij+1;
}
else
dr=mij-1;
}
printf("%d\n", sol);
return 0;
}