Cod sursa(job #1288308)

Utilizator xtreme77Patrick Sava xtreme77 Data 8 decembrie 2014 18:59:59
Problema Substr Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
/*
 * Code by Spiromanul
 */

#include <fstream>
#include <unordered_map>

const char IN [ ] = "substr.in" ;
const char OUT [ ] = "substr.out" ;
const int MAX = 17000 ;
const int P = 171 ;

using namespace std;

ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;

char sir [ MAX ] ;
int n ;
int k ;

unordered_map < unsigned int , int > hashin ;

int check ( int lungime )
{
    unsigned int BOSSHASH = 0 , put = 1 ;
    for ( int i = 0 ; i < lungime ; ++ i )
    {
        BOSSHASH = BOSSHASH * P + ( int ) sir [ i ] ;
    }
    for ( int i = 1 ; i < lungime ; ++ i )
    {
        put = put * P ;
    }
    hashin.clear ( ) ;
    hashin [ BOSSHASH ] = 1 ;
    for ( int i = lungime ; i < n ; ++ i )
    {
        BOSSHASH -= sir [ i - lungime ] * put ;
        BOSSHASH = BOSSHASH * P + ( int ) sir [ i ] ;
        hashin [ BOSSHASH ] ++ ;
    }
    int sol = 0 ;
    for ( auto x : hashin )
        sol = max ( sol , x.second ) ;

    return ( sol >= k ) ;
}

int cautarea_smechera_binara_a_lui_Patrascu ( )
{
    int step = 1 << 14 ;
    int i = 0 ;
    for ( ; step ; step >>= 1 )
        if ( i + step < n and check ( i + step ) )
            i += step ;
    return i ;
}

int main(    )
{
    fin >> n >> k ;
    fin >> sir ;
    fout << cautarea_smechera_binara_a_lui_Patrascu() ;
    return 0;
}