Cod sursa(job #1520975)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 9 noiembrie 2015 19:47:46
Problema Substr Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#define MOD 666013
#define BAZA 991
#define MAXN 16384
char v[MAXN];
int vf[MOD];
inline int cauta(int l,int k,int n){
    int i,p,nr;
    p=1;
    nr=0;
    for(i=l-1;i>=0;i--){
        nr=(nr+p*v[i])%MOD;
        if(i>0)
           p=(p*BAZA)%MOD;
    }
    vf[nr]++;
    for(i=l;i<n;i++){
         nr=(((nr-(p*v[i-l])%MOD+MOD)%MOD)*BAZA+v[i])%MOD;
         vf[nr]++;
    }
    i=0;
    while(i<MOD&&vf[i]<k)
       i++;
    for(int j=0;j<MOD;j++)
       vf[j]=0;
    if(i==MOD)
       return 0;
    return 1;
}
int main(){
    FILE*fi,*fout;
    int rez,pas,i,n,k;
    char a;
    fi=fopen("substr.in" ,"r");
    fout=fopen("substr.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&k);
    a=fgetc(fi);
    for(i=0;i<n;i++)
       v[i]=fgetc(fi);
    rez=0;
    for(pas=1<<15;pas;pas>>=1)
      if(rez+pas<=n&&cauta(rez+pas,k,n)==1)
          rez+=pas;
    fprintf(fout,"%d" ,rez);
    fclose(fi);
    fclose(fout);
    return 0;
}