Pagini recente » Cod sursa (job #2421259) | Cod sursa (job #2111808) | Cod sursa (job #2348703) | Cod sursa (job #1906180) | Cod sursa (job #1005221)
#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 - 1;
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;
}