Cod sursa(job #241468)

Utilizator katakunaCazacu Alexandru katakuna Data 10 ianuarie 2009 08:57:18
Problema Reguli Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include<stdio.h>

long long a,b,pi[30011],v[30011],i,n;

void prefix(){
long long q=0;
pi[1]=0;

    for(i=2;i<=n;i++){
      while(q && v[q+1]!=v[i]) q=pi[q];
      if(v[q+1] == v[i])       q++;
      pi[i]=q;
    }

}

int main(){

FILE *f=fopen("reguli.in","r");
FILE *g=fopen("reguli.out","w");

fscanf(f,"%lld",&n);
fscanf(f,"%lld",&a);

  for(i=1;i<n;i++){
  fscanf(f,"%lld",&b);
  v[i]=b-a;
  a=b;
  }

n--;
prefix();
long long j;

  for(i=1;i<=n;i++){
    if(pi[n] == n-i){
    fprintf(g,"%lld\n",i);
        for(j=1;j<=i;j++)
        fprintf(g,"%lld\n",v[j]);
    break;
    }
  }

fclose(f);
fclose(g);

return 0;
}