Cod sursa(job #3260128)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 30 noiembrie 2024 10:53:22
Problema Substr Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <bits/stdc++.h>
#define int unsigned int
#define DIM 17000
#define BASE 666013
using namespace std;

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

string s;
int n, k, st, dr, mij, ans;
int h[DIM], p[DIM];

void buildh(){
    p[0]=1;
    for(int i=1; i<=n; i++)
        p[i]=p[i-1]*BASE;
    h[1]=s[0];
    for(int i=2; i<=n; i++)
        h[i]=h[i-1]*BASE+s[i-1];
}

int geth(int st, int dr){
    return h[dr]-h[st-1]*p[dr-st+1];
}

bool check(int len){
    unordered_map <int, int> mp;
    for(int i=1; i<=n-len+1; i++){
        int currh=geth(i, i+len-1);
        mp[currh]++;
        if(mp[currh]==k)
            return 1;
    }
    return 0;
}

int32_t main(){
    fin>>n>>k>>s;
    buildh();
    st=1; dr=n;
    while(st<=dr){
        mij=(st+dr)>>1;
        if(check(mij)){
            ans=mij;
            st=mij+1;
        }else dr=mij-1;
    }
    fout<<ans;
}