Pagini recente » Cod sursa (job #340134) | Cod sursa (job #2276859) | Cod sursa (job #2097911) | Cod sursa (job #2597859) | Cod sursa (job #1507669)
#include <fstream>
#include <unordered_map>
#include <string>
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<string, int> h;
unordered_map<string, int>::iterator it;
int viz[NMax];
for(int i=0;i<=n;++i) viz[i] = 0;
int key = 0;
string aux = "";
for(int i=0;i<val;++i) aux += sir[i];
h[aux] = ++key;
for(int i=val;i<sir.size();++i)
{
aux.erase(aux.begin());
aux += 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;
}