Cod sursa(job #2476943)

Utilizator TudorCaloianCaloian Tudor-Ioan TudorCaloian Data 19 octombrie 2019 12:59:28
Problema Substr Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, k, rmq[30000][1000], lg2[30000], ans;
string s[30000], c;
multiset <int> ms;


void lg()
{
    for(int i = 0; 1<<i <= 30000; i++)
        lg2[1<<i] = i;
    for(int i = 1; i <= 30000; i++)
        if(!lg2[i]) lg2[i] = lg2[i-1];
}

int main()
{
    fin >> n >> k;
    fin >> c;
    for(int i = 0; i < n; i++)
        s[i]=c.substr(i);
    sort(s, s+n);
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < s[i].size(); j++)
            if(s[i][j]!=s[i+1][j]) break;
            else
                rmq[i][0]++;
    }

    for(int i = 1; (1<<i) < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            if(j+(1<<i)-1 >= n) break;
            rmq[j][i] = min(rmq[j][i-1], rmq[j+(1<<(i-1))][i-1]);

        }
    }
    k--;
    for(int i = 0; i < n-k; i++)
    {

        int d = lg2[k];
        ans = max(ans, min(rmq[i][d], rmq[i+k-(1<<d)][d]));
    }
    fout << ans;
  //for(int i = 0; i < n; i++) fout << s[i] << "\n";
    return 0;
}