Pagini recente » Cod sursa (job #925940) | Cod sursa (job #968694) | Cod sursa (job #788212) | Cod sursa (job #1098108) | Cod sursa (job #214198)
Cod sursa(job #214198)
#include <cstdio>
#define MAX_N 500005
long long V[MAX_N], A[MAX_N], pi[MAX_N];
int N;
void citire()
{
scanf("%d",&N);
for(int i = 0; i < N; ++i)
scanf("%lld",V+i);
for(int i = 1; i < N; ++i)
A[i] = V[i] - V[i-1];
}
void make_prefix()
{
int i;
long long q = 0;
for(i = 2, pi[1] = 0; i < N; ++i)
{
while(q && A[q+1] != A[i])
q = pi[q];
if(A[q+1] == A[i])
++q;
pi[i] = q;
}
}
void querry()
{
int i = N;
if(pi[N-1])
for(i = N - 1; i > 1; --i)
if((pi[i] - pi[i-1] != 1 && pi[i] == 1) || pi[i-1] == 0)
break;
printf("%d\n",i-1);
for(int k = 1; k < i; k++)
printf("%lld\n",A[k]);
}
int main()
{
freopen("reguli.in","rt",stdin);
freopen("reguli.out","wt",stdout);
citire();
make_prefix();
querry();
}