Cod sursa(job #612865)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 11 septembrie 2011 20:19:16
Problema Substr Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <cstring>

char ch[16386];
int h[300007],n,k;

int fct(int x)
{
    int sol=0,aux=0,aux2=0,i;
    memset(h,0,sizeof(h));
    for (i=1;i<x;++i)
        aux2*=27;
    for (i=1;i<=x;++i)
        aux=(aux*27+ch[i]-'a'+1)%300007;
    h[aux]=1;
    for (i=2;i<=n-k+1;++i)
    {
        aux=(aux-aux2*(ch[i-1]-'a'+1))%300007;
        if (aux<0)
            aux+=300007;
        aux=(aux*27+ch[i-1]-'a'+1)%300007;
        ++h[aux];
    }
    for (i=0;i<300007;++i)
        if (sol<h[i])
            h[i]=sol;
    return sol;
}

int main()
{
    int step,i;
    freopen("substr.in","r",stdin);
    freopen("substr.out","w",stdout);
    scanf("%d %d\n",&n,&k);
    fgets(ch,sizeof(ch),stdin);
    for (step=1;step<n-k+1;step<<=1);
    for (i=0;step;step>>=1)
        if (i+step<=n-k+1&&fct(i+step))
            i+=step;
    printf("%d\n",i);
    return 0;
}