Cod sursa(job #2605087)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 24 aprilie 2020 13:15:56
Problema Substr Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 20005;
const int BAZA = 27;
const int MOD = 1000000007;
int n,k;
char c[NMAX];
long long put[NMAX],h[NMAX];
unordered_map <long long,int> m;

int main()
{
    fin >> n >> k;
    fin >> (c+1);
    put[0]=1;
    for(int i=1;i<=16500;i++) put[i]=(1LL*put[i-1]*BAZA);
    for(int i=n;i>=1;i--) h[i]=(h[i+1]*BAZA+c[i]);
    int st=0,dr=n,mij,rasp=0;
    while(st<=dr){
        bool ok=false;
        mij=(st+dr)/2;
        for(int i=1;i<=n-mij+1;i++){
            long long hh=h[i]-(h[i+mij]*put[mij]);
            m[hh]++;
        }
        for(auto it:m){
            if(it.second>=k){
                ok=true;
                rasp=mij;
                break;
            }
        }
        m.clear();
        if(ok==true){
            st=mij+1;
        } else dr=mij-1;
    }
    fout << rasp;
    return 0;
}