Pagini recente » Cod sursa (job #1229744) | Cod sursa (job #2198437) | Cod sursa (job #2175134) | Cod sursa (job #1591339) | Cod sursa (job #779954)
Cod sursa(job #779954)
#include <stdio.h>
#define NMax 500010
typedef long long ll;
const char IN[]="reguli.in",OUT[]="reguli.out";
int N,Rez,L;
int P[NMax];
ll A[NMax];
void prefix()
{
int i,k=0;
P[1]=0;
for (i=2;i<=N;++i)
{
while (k>0 && A[k+1]!=A[i]) k=P[k];
P[i]= (k+= (A[k+1]==A[i]));
}
}
int main()
{
int i;
ll x,y;
freopen(IN,"r",stdin);
scanf("%d%lld",&N,&x);--N;
for (i=1;i<=N;++i){
scanf("%lld",&y);
A[i]=y-x;
x=y;
}
fclose(stdin);
prefix();
if (P[N]>=N/2){
for (Rez=N;Rez>0;--Rez) if (Rez%(Rez-P[Rez])==0) {
while (P[Rez]) Rez=P[Rez];
break;
}
}
else Rez=N;
freopen(OUT,"w",stdout);
printf("%d\n",Rez);
for (i=1;i<=Rez;++i) printf("%lld\n",A[i]);
fclose(stdout);
return 0;
}