Cod sursa(job #1005220)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 4 octombrie 2013 15:59:05
Problema Reguli Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
#include<string.h>

#define NMAX 500007

int x, n, T, Ans;
int pi[NMAX];
int a[NMAX], b[NMAX];

void fa_x(int b[], int i)
{
    while(x > 0 && b[x + 1] != b[i])
        x = pi[x];
    if(b[x + 1] == b[i])
        ++ x;
}

void KMP(int a[NMAX]){
    memset(pi, 0, sizeof(pi));
    for(int i = 2; i <= n; ++ i)
    {
        fa_x(a, i);
        pi[i] = x;
    }
}

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