Cod sursa(job #3345322)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 9 martie 2026 11:23:14
Problema Substr Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;
#define int long long
ifstream fin("substr.in");
ofstream fout("substr.out");
const int P = 31;
const int MOD = 1e9 + 123;
std::mt19937 rng(12345678);
int n, k, rng1[101];
int hash1[16400], pow1[16400];

inline int getHash(int st, int dr) { return (hash1[dr] - 1LL * hash1[st - 1] * pow1[dr - st + 1] % MOD + MOD) % MOD; }

inline int check(int x) {
    unordered_map<int, int> mapa;
    for(int i=1; i<=n-x+1; i++) {
        int val = getHash(i, i + x - 1);
        mapa[val]++;
        if(mapa[val] >= k) return 1;
    }
    return 0;
}

signed main()
{
    for(int i=48; i<=125; i++) rng1[i - 48] = rng() % MOD;
    fin >> n >> k, pow1[0] = 1;
    for(int i=1; i<=n; i++) {
        char ch; fin >> ch;
        pow1[i] = 1LL * pow1[i - 1] * P % MOD;
        hash1[i] = (1LL * hash1[i - 1] * P % MOD + rng1[ch - 48]) % MOD;
    }
    int st = 1, dr = n, sol = -1;
    while(st <= dr) {
        int mid = (st + dr) / 2;
        if(check(mid)) sol = mid, st = mid + 1;
        else dr = mid - 1;
    }
    fout << sol;

    return 0;
}