Cod sursa(job #1066727)

Utilizator mariacMaria Constantin mariac Data 25 decembrie 2013 15:11:46
Problema Substr Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <unordered_map>

using namespace std;
#define base 75
ifstream fin("substr.in");
ofstream fout("substr.out");
char s[16390];
int sol, N, K;
int cauta(int dim)
{
    unordered_map<unsigned int, int> h;
    int i;
    int maxi = 1;
    unsigned int key = 0, pow = 1;
    for( i = 0; i < dim; i++)
        {
            key = key * base + s[i];
            if(i) pow *= base;
        }
    h[key] = 1;
    if(h[key] >= K)return 1;
    for(i = dim; i < N; i++)
    {
        key -= pow * s[i - dim];
        key = key * base + s[i];
        if(h.find(key) != h.end())
            h[key]++;
        else h[key] = 1;
        if(h[key] >= K) return 1;
    }
    return 0;
}
int main()
{

    fin >> N >> K;
    fin >> s;
    int st = 0, dr = N, mij;
    if(K == 1) sol = N;
    while(st <= dr && K != 1)
    {
        mij = (st + dr) / 2;
        if(cauta(mij)) {
                sol = mij;
                st = mij + 1;
        }
        else dr = mij - 1;
    }
    fout<<sol;
    return 0;
}