Mai intai trebuie sa te autentifici.

Cod sursa(job #1884866)

Utilizator cristina_borzaCristina Borza cristina_borza Data 19 februarie 2017 13:31:03
Problema Substr Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <cstring>

#define BASE 73

#define MOD1 666013

#define DIM 20000

using namespace std;

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

int n, k, mp[2 * MOD1];
char s[DIM];

bool verif (int lg) {
    int h1 = 0, h2 = 0;
    int p1 = 1, p2 = 1;
    memset (mp, 0 , sizeof (mp));

    for (int i = 1; i <= lg; ++i) {
        h1 = (h1 * BASE + (s[i] - 'a')) % MOD1;

        if (i != 1) {
            p1 *= BASE;
            p1 %= MOD1;
        }
    }

    mp[h1] = 1;
    for (int i = lg + 1; i <= n; ++i) {
        long long qw;
        qw = (((h1 - ((s[i - lg] - 'a') * p1) % MOD1 + MOD1) % MOD1) * BASE + (s[i] - 'a')) % MOD1;
        h1 = (int) qw;

        ++mp[h1];
        if (mp[h1] >= k)
            return 1;
    }

    return 0;
}

int cbin () {
    int i, p = 0;
    for (i = 1; i <= n; i <<= 1);
    while (i) {
        if (i + p <= n && verif (i + p) == 1) {
            p += i;
        }

        i >>= 1;
    }

    return p;
}

int main() {
    f >> n >> k >> (s + 1);
    g << cbin ();
    return 0;
}