Cod sursa(job #1065575)

Utilizator mariacMaria Constantin mariac Data 23 decembrie 2013 14:42:45
Problema Substr Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <string.h>

using namespace std;
#define base 256
#define MOD 666013
ifstream fin("substr.in");
ofstream fout("substr.out");
char s[16390];
int sol, N, K;
int h[666015];
int cauta(int dim)
{
    int i;
    memset(h, 0 , sizeof(h));
    int maxi = 1, key = 0, pow = 1;
    for( i = 0; i < dim; i++)
        {
            key = (key * base + s[i]) % MOD;
            if(i) pow = (pow * base) % MOD;
        }
    h[key] = 1;
    for(i = dim; i < N; i++)
    {
        key = (((key - (pow * s[i - dim] % MOD) + MOD) * base) + s[i]) % MOD;
        if(h[key])
        {
            h[key]++;
            if(h[key] > maxi) maxi = h[key];
        }
        else h[key] = 1;
    }
    return maxi;
}
int main()
{

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