Cod sursa(job #46644)
#include <stdio.h>
#define Nmax 500000
long long N, A[Nmax], K;
long long R[Nmax];
void citire ()
{
FILE *in = fopen ("reguli.in", "rt");
fscanf (in , "%lld" , &N);
for(int i=0;i<N;i++)
fscanf (in,"%lld", &A[i]);
fclose (in);
}
void calc_R ()
{
for(int i=1;i<N-1;i++)
if(A[i+1]-A[i]==A[1]-A[0])
{
R[0]++;
R[R[0]]=i;
}
}
void regula ()
{
int i,k,j,ok=0;
calc_R();
for(k=1;k<=R[0];k++)
{
ok=1;
for(i=1;i<=N/(R[k]+1)+2 && ok;i++)
{
for(j=1;j<=R[i];j++)
if(A[j+1]-A[j]!=A[j+i*R[k]+1]-A[j+i*R[k]] && j+i*R[k]+1<N)
ok=0;
}
if(ok)
{
K=R[k];
break;
}
}
if(!ok)
K=N;
}
void afisare ()
{
FILE *out = fopen ("reguli.out" , "wt");
fprintf (out, "%lld\n", K);
for(int i=0;i<K;i++)
{
fprintf(out, "%lld\n", A[i+1]-A[i]);
}
fclose(out);
}
int main ()
{
citire ();
regula ();
afisare ();
return 0;
}