Pagini recente » Cod sursa (job #1482677) | Cod sursa (job #2986250) | Cod sursa (job #1639723) | Cod sursa (job #1964451) | Cod sursa (job #1065575)
#include <fstream>
#include <string.h>
using namespace std;
#define base 256
#define MOD 666013
ifstream fin("substr.in");
ofstream fout("substr.out");
char s[16390];
int sol, N, K;
int h[666015];
int cauta(int dim)
{
int i;
memset(h, 0 , sizeof(h));
int maxi = 1, key = 0, pow = 1;
for( i = 0; i < dim; i++)
{
key = (key * base + s[i]) % MOD;
if(i) pow = (pow * base) % MOD;
}
h[key] = 1;
for(i = dim; i < N; i++)
{
key = (((key - (pow * s[i - dim] % MOD) + MOD) * base) + s[i]) % MOD;
if(h[key])
{
h[key]++;
if(h[key] > maxi) maxi = h[key];
}
else h[key] = 1;
}
return maxi;
}
int main()
{
fin >> N >> K;
fin >> s;
int st = 1, dr = N, mij;
while(st <= dr)
{
mij = (st + dr) / 2;
if(cauta(mij) >= K) {
sol = mij;
st = mij + 1;
}
else dr = mij - 1;
}
fout<<sol;
return 0;
}