Pagini recente » Cod sursa (job #1871145) | Cod sursa (job #1186362) | Cod sursa (job #3255176) | Cod sursa (job #706657) | Cod sursa (job #24700)
Cod sursa(job #24700)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define nmax 500010
long long a[nmax];
int pi[nmax],i,j,sol,r,c,n,ret;
void pref()
{
int k=0;
pi[1]=0;
for (int q=2;q<=n;q++)
{
while ((k>0)&&(a[k+1]!=a[q]))
k=pi[k];
if (a[k+1]==a[q])
++k;
pi[q]=k;
}
}
int main()
{
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%lld",a+i);
for (i=n-1;i>0;i--)
a[i]=a[i]-a[i-1];
a[0]=0;
--n;
pref();
sol=0;
do
{
ret=1,++sol;
r=n%sol,c=n/sol;
if (pi[n-r]==0)
ret=0;
if ((n-r)%(n-r-pi[n-r])!=0)
ret=0;
if ((n-r)/(n-r-pi[n-r])!=c)
ret=0;
}
while (!ret)
printf("%d\n",sol);
for (i=1;i<=sol;i++)
printf("%lld\n",a[i]);
return 0;
}