Cod sursa(job #1412224)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 1 aprilie 2015 10:34:53
Problema Substr Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<cstdio>
char si[17000];
const int md=666013;
int fr[md+5];
int main()
{
    freopen("substr.in","r",stdin);
    freopen("substr.out","w",stdout);
    int n,k,i,j,mi,la,pu,tm,st,dr;
    bool te;
    scanf("%d%d\n",&n,&k);
    gets(si+1);
    for(i=1;i<=n;i++)
    si[i]=si[i]-'a'+1;
    st=1;
    dr=n;
    la=0;
    while(st<=dr)
    {
        te=0;
        mi=(st+dr)/2;
        pu=1;
        for(i=1;i<mi;i++)
        pu=(pu*27)%md;
        tm=0;
        for(i=1;i<=mi;i++)
        tm=(tm*27+si[i])%md;
        fr[tm]++;
        for(i=mi+1;i<=n;i++)
        {
            tm=tm-(pu*si[i-mi])%md;
            if(tm<0)
            tm=tm+md;
            tm=(tm*27+si[i])%md;
            fr[tm]++;
        }
        for(i=0;i<md;i++)
        {
        if(fr[i]>=k)
            te=1;
        fr[i]=0;
        }
        if(te)
        {
            la=mi;
            st=mi+1;
        }
        else
        dr=mi-1;
    }
    printf("%d\n",la);
    return 0;
}