Cod sursa(job #2988468)

Utilizator pifaDumitru Andrei Denis pifa Data 4 martie 2023 17:24:47
Problema Substr Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

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

long long n, k;

const long long N = 20005;

char s[N];

const long long P = 89;

const long long mod = 1e9 + 7;

long long hsh[N], power[N];

long long check(long long lung)
{
    map <long long, long long> mp;
    for(long long i = 1; i <= n - lung + 1; i++)
    {
        long long aux = hsh[i + lung - 1] - hsh[i - 1] * power[lung];
        mp[aux]++;
    }
    for(auto it:mp)
    {
        if(it.second >= k)
            return 1;
    }
    return 0;
}

signed main()
{
    in >> n >> k;
    in.get();
    in >> (s + 1);
    power[0] = 1;
    for(long long i = 1; i <= n; i++)
    {
        power[i] = (power[i - 1] * P);
    }
    for(long long i = 1; i <= n; i++)
    {
        hsh[i] = (hsh[i - 1] * P + (long long)s[i] + 1);
    }
    long long st = 0, dr = n, rasp = 0;
    while(st <= dr)
    {
        long long med = (st + dr) >> 1;
        if(check(med))
        {
            st = med + 1;
            rasp = med;
        }
        else
        {
            dr = med - 1;
        }
    }
    out << rasp << '\n';
    return 0;
}