Pagini recente » Cod sursa (job #2590082) | Cod sursa (job #439104) | Cod sursa (job #1705188) | Cod sursa (job #645120) | Cod sursa (job #2549311)
#include <bits/stdc++.h>
#define mod 1000000007
#define modul 100007
using namespace std;
long long int v[16385],k,n,putere[16385];
string str;
vector<pair<int,int>>numere[100010];
int nrap(int val)
{
int poz;
poz=val%modul;
for(int i=0; i<numere[poz].size(); ++i)
{
if(numere[poz][i].first==val)
{
return numere[poz][i].second;
}
}
return 0;
}
void add(int val)
{
int vf=0,poz;
poz=val%modul;
for(int i=0; i<numere[poz].size(); ++i)
{
if(numere[poz][i].first==val)
{
numere[poz][i].second++;
vf=1;
break;
}
}
if(vf==0)
{
numere[poz].push_back({val,1});
}
}
bool vf(long long st)
{
long long nr=0;
for(int i=1; i<=st; ++i)
{
nr=(1LL*nr*111+v[i])%mod;
}
add(nr);
if(nrap(nr)>=k)
{
return 1;
}
for(int i=st+1; i<=n; ++i)
{
nr=(nr-(putere[st-1]*v[i-st])%mod+mod)%mod;
nr=(1LL*nr*111+v[i])%mod;
add(nr);
if(nrap(nr)>=k)
{
return 1;
}
}
return 0;
}
int main()
{
ifstream fin("substr.in");
ofstream fout("substr.out");
fin>>n>>k>>str;
putere[0]=1;
for(int i=1; i<=n; ++i)
{
v[i]=str[i-1]-'a'+1;
putere[i]=(1LL*putere[i-1]*111)%mod;
}
long long int st,dr,mij,ans=0;
st=1;
dr=n;
while(st<=dr)
{
mij=(st+dr)/2;
if(vf(mij)==1)
{
ans=mij;
st=mij+1;
}
else
{
dr=mij-1;
}
for(int i=0; i<=100007; ++i)
{
numere[i].clear();
}
}
fout<<ans;
return 0;
}