Cod sursa(job #1008860)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 11 octombrie 2013 23:46:11
Problema Substr Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#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;
}