Cod sursa(job #1280882)

Utilizator timicsIoana Tamas timics Data 2 decembrie 2014 17:37:36
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<stdio.h>
#include<iostream>
using namespace std;
int N, pi[500100], q;
long long a[500100],b[500100];

int main() {
    freopen("reguli.in","r",stdin);
    freopen("reguli.out","w",stdout);
    scanf("%d",&N);
    for(int i=1;i<=N;++i) {
        scanf("%lld",&a[i]);
    }
    for(int i=1;i<N;++i) {
        b[i] = a[i+1] - a[i];
    }
    --N;
    for(int i=2;i<=N;++i) {
        while(q && b[i] != b[q+1]) {
            q = pi[q];
        }
        if(b[i]==b[q+1]) {
            ++q;
        }
        pi[i] = q;
    }
    printf("%d\n",N - pi[N]);
    for(int i=1;i<=N-pi[N];++i) {
        printf("%lld\n",b[i]);
    }
    return 0;
}