Pagini recente » Cod sursa (job #163652) | Cod sursa (job #446876) | Cod sursa (job #1544263) | Cod sursa (job #1963945) | Cod sursa (job #2756427)
#include <fstream>
using namespace std;
ifstream cin("substr.in");
ofstream cout("substr.out");
string str;
int f[70000];
int main()
{
long long n,k,mij,st,dr,baza,putere=1,mod,cnt=0,ans=0,i,cod=0,codnou=0,DR,ok=0;
cin>>n>>k;
cin>>str;
dr=n;
st=1;
baza=13;
mod=66973;
while(st<=dr)
{
ok=0;
mij=(st+dr)>>1;
putere=1;
cnt=0;
cod=0;
for(i=1;i<=mij-1;i++)
{
putere=(1LL*putere*baza)%mod;
}
for ( int i =0; i < mij; ++i)
{
cod = ((1LL * cod * baza)%mod + str[i])%mod;
}
f[cod]++;
if(f[cod]>=k)
ok=1;
for ( DR = mij; DR < n; ++DR)
{
codnou = ((cod - (1LL * str[DR-mij] * putere)%mod) + mod)%mod;
codnou = ((1LL*codnou*baza)%mod + str[DR])%mod;
f[codnou]++;
if(f[codnou]>=k)
{
ok=1;
}
cod=codnou;
}
if(ok==1)
{
ans=mij;
st=mij+1;
}
else
{
dr=mij-1;
}
for(i=0;i<=66973;i++)
{
f[i]=0;
}
}
cout<<ans;
return 0;
}