Pagini recente » Cod sursa (job #2474556) | Cod sursa (job #619079) | Cod sursa (job #1570219) | selectie_emag_mediu_2016_runda1 | Cod sursa (job #2237949)
#include<bits/stdc++.h>
#define mod 1000000009
#pragma GCC optimize("O3")
using namespace std;
ifstream fi("substr.in");
ofstream fo("substr.out");
int n, k;
char c[18002];
map<long long, int>mp[20];
long long hassh[18002];
long long modpow(long long b, long long ex)
{
long long sol = 1;
while(ex)
{
if(ex&1)
sol = (sol * b) % mod;
b = (b * b) % mod;
ex >>= 1;
}
return sol;
}
int qqq=0;
bool check(int len)
{
long long cc = modpow(26, len);
++qqq;
for(int i = 1; i <= n; ++i)
{
long long qq = hassh[i];
if(i >= len)
{
qq = (qq + (mod - hassh[i - len]) * cc) % mod;
mp[qqq][qq]++;
if(mp[qqq][qq]>=k)
return 1;
}
}
return 0;
}
int main()
{
fi >> n >> k;
fi >> (c+1);
hassh[0] = 1;
for(int i = 1; i <= n; ++i)
hassh[i] =( hassh[i-1] * 26LL + (c[i] - '0') ) % mod;
int b = 1;
int e = n;
int sol = 0;
while(b <= e)
{
int mid = (b+e)/2;
if(check(mid))
sol = mid, b = mid+1;
else
e = mid-1;
}
fo << sol;
return 0;
}