Cod sursa(job #2227260)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 31 iulie 2018 16:08:26
Problema Substr Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 16500;
const int INF = (1<<30);
const int baza = 31;

char c[NMAX];
int v[NMAX];

int main()
{
    int n,k;
    fin >> n >> k;
    fin >> (c+1);
    int st=0,dr=n+1;
    int mij;
    bool ok=0;
    long long x=0,p=1;
    int K=0;
    int rasp=0;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        p=1;
        x=0;
        for(int i=1;i<=mij;i++)
        {
            x=x*baza+(c[i]-'0');
            if(i>=2)
            {
                p*=baza;
            }
        }
        for(int i=0;i<=n+1;i++)
        {
            v[i]=0;
        }
        K=0;
        c[n+1]='0';
        for(int i=mij+1;i<=n+1;i++)
        {
            v[++K]=x;
            x=x-(c[i-mij]-'0')*p;
            x=x*baza+(c[i]-'0');
        }
        sort(v+1,v+K+1);
        v[K+1]=INF;
        ok=0;
        int apar=0;
        for(int i=1;i<=K;i++)
        {
            if(v[i]==v[i+1])
                apar++;
            else apar=1;
            if(apar>=k)
                ok=1;
        }
        if(ok==1)
        {
            st=mij+1;
            rasp=mij;
        }
        else dr=mij-1;
    }
    fout << rasp;
    return 0;
}