Pagini recente » Cod sursa (job #2396323) | Cod sursa (job #2841882) | Cod sursa (job #2928258) | Cod sursa (job #2195500) | Cod sursa (job #1066728)
#include <fstream>
#include <unordered_map>
using namespace std;
#define base 75
ifstream fin("substr.in");
ofstream fout("substr.out");
char s[16390];
int sol, N, K;
int cauta(int dim)
{
unordered_map<unsigned int, int> h;
int i;
int maxi = 1;
unsigned int key = 0, pow = 1;
for( i = 0; i < dim; i++)
{
key = key * base + s[i];
if(i) pow *= base;
}
h[key] = 1;
if(h[key] >= K)return 1;
for(i = dim; i < N; i++)
{
key -= pow * s[i - dim];
key = key * base + s[i];
if(h.find(key) != h.end())
h[key]++;
else h[key] = 1;
if(h[key] >= K) return 1;
}
return 0;
}
int main()
{
fin >> N >> K;
fin >> s;
int st = 0, dr = N, mij;
if(K == 1) sol = N;
while(st <= dr && K != 1)
{
mij = (st + dr) / 2;
if(cauta(mij)) {
sol = mij;
st = mij + 1;
}
else dr = mij - 1;
}
fout<<sol;
return 0;
}