Pagini recente » Cod sursa (job #756062) | Cod sursa (job #800337) | Cod sursa (job #741335) | Cod sursa (job #604929) | Cod sursa (job #1507712)
#include <fstream>
#include <unordered_map>
#include <string>
#include <deque>
using namespace std;
#define NMax 16400
ifstream f("substr.in");
ofstream g("substr.out");
int n,k;
string sir;
int sol;
inline bool valid(int val)
{
unordered_map<deque<char>, int> h;
unordered_map<deque<char>, int>::iterator it;
int viz[NMax];
for(int i=0;i<=n;++i) viz[i] = 0;
int key = 0;
deque<char> aux;
for(int i=0;i<val;++i) aux.push_back(sir[i]);
h[aux] = ++key;
for(int i=val;i<sir.size();++i)
{
aux.pop_front();
aux.push_back(sir[i]);
it = h.find(aux);
if(it != h.end())
{
int x = (*it).second;
if(++viz[x] == k) return true;
}
else h[aux] = ++key;
}
return false;
}
inline void cautbin()
{
int st = 1, dr = n;
while(st<=dr)
{
int mij = ((st+dr)>>1);
if(valid(mij))
{
sol = max(sol, mij);
st = mij + 1;
}
else dr = mij - 1;
}
}
int main()
{
f>>n>>k>>sir;
--k;
cautbin();
g<<sol<<"\n";
f.close();
g.close();
return 0;
}