Cod sursa(job #1080965)

Utilizator costel93FMI - Dumea Eduard Constantin costel93 Data 13 ianuarie 2014 01:33:00
Problema Substr Scor 70
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <map>

#define p 27

using namespace std;

ifstream fin("substr.in");
ofstream fout("substr.out");

map<int, int> map1;

int n, k, sol = 0;
string s;

bool verific(int nr){

    unsigned int key = 0, pw = 1, i; //dispersion by overflow

    key = s[0];
    for(i = 1; i < nr; i++)
    {
        key = key*p + s[i];
        pw *= p;
    }

    map1[key] = 1;

    for(i = nr; i < n; i++)
    {
        key = (key - s[i-nr] * pw) * p + s[i];

        map1[key]++;
        if(map1[key]==k)
        {
            map1.clear();
            return true;

        }
    }
    map1.clear();

    return false;
}


void cauta(int st, int dr)
{
    int m=(st+dr)/2;

    if(st>dr)
        return;
    else
    if(verific(m))
    {
        sol=m;
        cauta(m+1, dr);
    }
    else
        cauta(st, m-1);

}

int main()
{
    fin>>n>>k>>s;
    cauta(1, n-k+1);
    fout<<sol;
    return 0;
}