Cod sursa(job #173528)

Utilizator savimSerban Andrei Stan savim Data 7 aprilie 2008 20:15:05
Problema Substr Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

char text[17000];
int v[17000];
int i,j,p,q,r,n,k,ok,sol,nr;
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*29+text[i]-'a';
              if (i>1) put=put*29;
          }

          for (i=0; i<=n; i++) v[i]=0;
          
          text[n+1]='a';
          int m=0;
          for (i=r+1; i<=n+1; i++)
          {
              m++;
              v[m]=x;

              x=x-put*(text[i-r]-'a');
              x=x*29+text[i]-'a';
          }
          
          sort(v+1,v+m+1);

          v[m+1]=-1;
          ok=0;
          for (i=1; i<=m; i++)
          {
              if (v[i]==v[i+1]) nr++;
              else nr=1;
              if (nr>=k) ok=1;
          }

          if (ok) 
          {
              p=r;
              sol=r;
          }
          else q=r;
    }
    
    printf("%d\n",sol);    
    
    return 0;    
}