Pagini recente » Cod sursa (job #793965) | Cod sursa (job #726207) | Cod sursa (job #285224) | Cod sursa (job #2945593) | Cod sursa (job #1008860)
#include <fstream>
#include <cstring>
#include <algorithm>
#include <map>
#define Base 56
#define Mod1 101149
#define Mod2 515423
#define Nmax 16500
using namespace std;
int n,K;
char s[Nmax];
int Pow1[Nmax],a[Mod1];
map < string, int >M;
inline bool Verif(const int k)
{
int i, j;
string H;
M.clear();
for(i = 1;i <= k; ++i)
H += s[i];
++M[H];
for(i = k+1;i <= n; ++i)
{
j = 0;
for(string ::iterator it=H.begin()+1;it!=H.end();++it)
H[j++] = *it;
H[j] = s[i];
if(++M[H] >= K)
return true;
}
return false;
}
int main()
{
ifstream f("substr.in");
f>>n>>K>>(s+1);
f.close();
int Left = 0,Right = n,Middle, sol = 0;
if(K!=1)
while(Left<=Right)
{
Middle = (Left+Right)>>1;
if(Verif(Middle))
{
sol = Middle;
Left = Middle + 1;
}
else
Right = Middle-1;
}
else
sol = n;
ofstream g("substr.out");
g<<sol<<"\n";
g.close();
return 0;
}