Cod sursa(job #18549)
| Utilizator | Data | 18 februarie 2007 12:36:17 | |
|---|---|---|---|
| Problema | Reguli | Scor | 80 |
| Compilator | cpp | Status | done |
| Runda | preONI 2007, Runda 2, Clasele 11-12 | Marime | 0.64 kb |
#include <stdio.h>
#define nm 524288
int n, v[nm], a[nm], p[nm];
int main()
{
int i, j;
freopen("reguli.in", "r", stdin);
freopen("reguli.out", "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
scanf("%d", &v[i]);
if (i > 1)
a[i - 1] = v[i] - v[i - 1];
}
--n;
p[1] = j = 0;
for (i = 2; i <= n; ++i)
{
while(j && a[j + 1] != a[i])
j = p[j];
if (a[j + 1] == a[i])
++j;
p[i] = j;
}
printf("%d\n", n - p[n]);
for (i = 1; i <= n - p[n]; ++i)
printf("%d\n", a[i]);
return 0;
}
