Pagini recente » Cod sursa (job #3245193) | Cod sursa (job #769194) | Borderou de evaluare (job #2912162) | Cod sursa (job #230687) | Cod sursa (job #2117194)
#include <stdio.h>
#define SIZE 500001
static int x[SIZE];
static size_t pi[SIZE];
int main(void)
{
size_t n, i, q;
int prev, c, ok;
freopen("reguli.in", "r", stdin);
freopen("reguli.out", "w", stdout);
scanf("%lu %d", &n, &prev);
for (i = 1; i < n; i++) {
scanf("%d", &c);
x[i] = c - prev;
prev = c;
}
pi[1] = 0;
q = 0;
for (i = 2; i < n; i++) {
while (q > 0 && x[q + 1] != x[i]) {
q = pi[q];
}
if (x[q + 1] == x[i]) {
q++;
}
pi[i] = q;
}
for (i = n - 1; i > 0; i--) {
if (i % (i - pi[i]) == 0) {
ok = 1;
for (q = 1; ok && q <= n - 1 - i; q++) {
if (x[i + q] != x[q]) {
ok = 0;
}
}
if (ok) {
printf("%lu\n", i - pi[i]);
for (q = 1; q <= i - pi[i]; q++) {
printf("%d\n", x[q]);
}
} else {
printf("%lu\n", n - 1);
for (q = 1; q < n; q++) {
printf("%d\n", x[q]);
}
}
break;
}
}
return 0;
}