Cod sursa(job #3209570)

Utilizator mateilucaLuca Matei Gabriel mateiluca Data 2 martie 2024 20:21:44
Problema Substr Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>
#define P 1000033

using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
short n, k;
char s[16400];
unordered_map<int, short> M;
int Check(int L)
{
    M.clear();
    int i, x1, c1;
    short maxi = 1;
    x1 = 0;
    c1 = 1;
    for(i = 1;i < L;i++)
        c1 = c1 * 26 % P;
    for(i = 0;i < L;i++)
        x1 = (x1 * 26 + s[i] - 'a') % P;
    M[x1]++;
    for(i = L;s[i] != 0;i++)
    {
        x1 = (x1 - c1 * (s[i-L] - 'a') + P) % P;
        x1 = (x1 * 26 + s[i] - 'a') % P;
        M[x1]++;
        maxi = max(maxi, M[x1]);
    }
    return (maxi >= k);
}
int CautBin()
{
    int st, dr, mij, ans = 0;
    st = 1;
    dr = strlen(s);
    while(st <= dr)
    {
        mij = (st + dr) / 2;
        if(Check(mij))
            {ans = mij;st = mij + 1;}
        else dr = mij - 1;
    }
    return ans;
}

int main()
{
    fin >> n >> k;
    fin.get();
    fin >> s;
    fout << CautBin() << "\n";
    fout.close();
    return 0;
}