Pagini recente » Cod sursa (job #2624569) | Cod sursa (job #1998149) | Cod sursa (job #1531610) | Autentificare | Cod sursa (job #293745)
Cod sursa(job #293745)
#include<stdio.h>
long a[500001],km[500001],n,i,j,x0,x1,max;
void prefix()
{ km[1]=0;
int k=0;
for(int q=2;q<=n;q++)
{ while(a[q]!=a[k+1]&&k>0)
k=km[q];
if(a[q]==a[k+1])
k++;
km[q]=k;
if(km[q]>=km[q-1]&&km[q-1]!=0)
max=q;
}
}
int perioada()
{ for(i=1;i<n;i++)
{ int r=n%i;
int c=n/i;
if(km[n-r]>0&&(n-r)%(n-r-km[n-r])==0&&(n-r)/(n-r-km[n-r])==c&&km[n]==km[r])
return i;
}
return n;
}
int main()
{
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%ld",&n);
scanf("%ld",&x0);
for(i=1;i<n;i++)
{ scanf("%ld",&x1);
a[i]=x1-x0;
x0=x1;
}
prefix();
int nr=perioada();
printf("%ld\n",nr);
for(i=1;i<=nr;i++)
printf("%ld\n",a[i]);
return 0;
}