Cod sursa(job #2131201)

Utilizator lessanleonard savu lessan Data 14 februarie 2018 15:13:14
Problema Reguli Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <stdio.h>
#include <stdlib.h>

int main() {

    FILE *fin,*fout;
    long long nr1,*v,nr2,*prefix,k=0;
    int n,i;

    fin = fopen("reguli.in","rt");
    fout = fopen("reguli.out","wt");

    fscanf(fin,"%d%lld",&n,&nr1);
    v = (long long *)calloc(n-1,sizeof(long long));
    prefix = (long long *)calloc(n-1,sizeof(long long));
    n--;
    for(i=0;i<n;i++){
        fscanf(fin,"%lld",&nr2);
        *(v+i) = nr2-nr1;
        nr1 = nr2;
    }
    for(i=1;i<n;i++){
        while(k && *(v+i) != *(v+k))
            k = *(prefix+k-1);
        if(*(v+i) == *(v+k))
            k++;
        *(prefix+i) = k;
    }

    i = n-1;
    while( *(prefix+i) == *(prefix+i-1)+1 && *(prefix+i-1)  && i>=0){
        i--;
    }

    if(i == n-1)
        i++;

    fprintf(fout,"%d\n",i);

    for(int j=0;j<i;j++){
        fprintf(fout,"%lld\n",*(v+j));
    }

    return 0;
}