Cod sursa(job #1731584)

Utilizator cubaLuceafarul cuba Data 19 iulie 2016 12:41:08
Problema Substr Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("substr.in");
ofstream g("substr.out");
const int NMAX = 16389;
const int Base = 97;
int n, k, Put[NMAX], cifre[NMAX], Partial[NMAX];
char s[NMAX];
inline int Decode(const int st,const int dr) {
    return cifre[dr]-cifre[st-1]*Put[dr-st+1];
}
inline bool Check(int L) {
    int cnt = 1, mx = 0, na = 0;
    for(int i = L; i <= n ;i++) {
        Partial[++na] = Decode(i-L+1,i);
    }
    sort(Partial,Partial + na + 1);
    for(int i = 2; i <= na; i++) {
        if(Partial[i] == Partial[i-1]) {
            cnt++;
            mx = max(mx,cnt);
        }
        else {
            cnt = 1;
        }
    }
    if(mx >= k)
        return 1;
    return 0;
}
inline void Cb() {

    int st = 1, dr = n, sol = 0;
    while(st <= dr) {

        int m = (st + dr)/2;
        if(Check(m)) {
            sol = m;
            st = m + 1;
        }
        else
            dr = m - 1;
    }
    g<< sol << "\n";
}
int main()
{
    f>> n >> k;
    f>>(s+1);
    Put[0] = 1;
    for(int i = 1; s[i]; i++) {
        Put[i]=Put[i-1]*Base;
        cifre[i]=cifre[i-1]*Base+s[i];
    }
    Cb();
    return 0;
}