Pagini recente » Cod sursa (job #1998169) | Cod sursa (job #1689824) | Cod sursa (job #1821579) | Cod sursa (job #1599413) | Cod sursa (job #1080964)
#include <iostream>
#include <fstream>
#include <map>
#define p 27
using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
map<int, int> map1;
int n, k, sol;
string s;
bool verific(int nr){
unsigned int key = 0, pw = 1, i; //dispersion by overflow
key = s[0];
for(i = 1; i < nr; i++)
{
key = key*p + s[i];
pw *= p;
}
map1[key] = 1;
for(i = nr; i < n; i++)
{
key = (key - s[i-nr] * pw) * p + s[i];
map1[key]++;
if(map1[key]==k)
{
map1.clear();
return true;
}
}
map1.clear();
return false;
}
void cauta(int st, int dr)
{
int m=(st+dr)/2;
if(st>dr)
return;
else
if(verific(m))
{
sol=m;
cauta(m+1, dr);
}
else
cauta(st, m-1);
}
int main()
{
fin>>n>>k>>s;
cauta(1, n);
fout<<sol;
return 0;
}