Cod sursa(job #173487)

Utilizator savimSerban Andrei Stan savim Data 7 aprilie 2008 19:56:59
Problema Substr Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#define prim 666013
char text[17000];
int ap[prim+10];
int i,j,p,q,r,n,k,ok,sol;
unsigned int x,put;
int main()
{
    freopen("substr.in","r",stdin);
    freopen("substr.out","w",stdout);
    
    scanf("%d %d ",&n,&k);
    scanf("%s ",text+1);
    
    p=0;q=n+1;
    while (p+1<q)
    {
          r=(p+q)/2;
          ok=0;
          x=0;put=1;
          for (i=1; i<=r; i++)
          {
              x=x*27+text[i]-'a';
              if (i<r) put=put*27;
          }

          for (i=0; i<=prim-1; i++)
            ap[i]=0;
          
          for (i=r+1; i<=n+1; i++)
          {
              x=x%prim;
              ap[x]++;
              if (ap[x]>=k) ok=1;
              x=x-put*(text[i-r]-'a');
              if (x<0) x+=prim;
              x=x*27+text[i]-'a';
          }
          
          if (ok) 
          {
              p=r;
              sol=r;
          }
          else q=r;
    }
    
    printf("%d\n",sol);    
    
    return 0;    
}