Pagini recente » Cod sursa (job #2049914) | Cod sursa (job #2428446) | Cod sursa (job #151194) | Cod sursa (job #1668128) | Cod sursa (job #1469619)
#include <iostream>
#include <cstdio>
using namespace std;
const char iname[] = "reguli.in";
const char oname[] = "reguli.out";
const int MAXN = 500010;
long long x[MAXN], a[MAXN];
int n;
void getPrefix()
{
int dim = 0, poz = 0;
int pr[MAXN];
int k = 0;
pr[1] = 0;
for(int i = 2; i < n; i++)
{
while(k > 0 && a[k+1] != a[i])
k = pr[k];
if(a[k+1] == a[i])
k++;
pr[i] = k;
if(k == 1) poz = i - 1;
if(poz > 0 && k > 0 && (k%poz == 0)) dim = poz;
}
printf("%d\n",dim);
for(int i = 1; i <= dim; i++)
printf("%lld\n", a[i]);
}
int main()
{
freopen(iname, "r", stdin);
freopen(oname, "w", stdout);
scanf("%d", &n);
scanf("%lld",x);
for(int i = 1; i < n; i++)
{
scanf("%lld", x+i);
a[i] = x[i] - x[i-1];
}
getPrefix();
return 0;
}