Cod sursa(job #1522913)

Utilizator ipus1Stefan Enescu ipus1 Data 12 noiembrie 2015 09:33:50
Problema Substr Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>
#define mod 100007
char v[16385];
int vec[100010];
int main ()
{freopen ("substr.in","r",stdin);
freopen ("substr.out","w",stdout);
int n,k,i,c1,c2,x,max,nr,put;
max=0;
scanf("%d%d",&n,&k);
scanf("%s",&v);
if(k==1)
    {printf("%d",n);
    return 0;
    }
c1=1;
c2=n/k;
while(c1<=c2)
    {x=(c1+c2)/2;
    for(i=0;i<=100007;i++)
        vec[i]=0;
    nr=0;
    for(i=0;i<x;i++)
        nr=(nr*123+v[i])%mod;
    vec[nr]=1;
    put=1;
    for(i=1;i<x;i++)
        put=(put*123)%mod;
    for(i=x;i<n;i++)
        {nr=(((nr-v[i-x]*put+123*mod)%mod)*123+v[i])%mod;
        vec[nr]++;
        if(vec[nr]==k)
            {i=n;
            max=x;
            c1=x+1;
            }
        }
    if(i==n)
        c2=x-1;
    }
printf("%d",max);
return 0;
}