Pagini recente » Cod sursa (job #1467935) | Cod sursa (job #70141) | Cod sursa (job #2916693) | Cod sursa (job #1864311) | Cod sursa (job #24690)
Cod sursa(job #24690)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define nmax 500010
int n,a[nmax],i,j,sol,pi[nmax];
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 ok(int l)
{
int r=n%l,c=n/l;
if (pi[n-r]==0)
return 0;
if ((n-r)%(n-r-pi[n-r])!=0)
return 0;
if ((n-r)/(n-r-pi[n-r])!=c)
return 0;
return 1;
}
int main()
{
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",a+i);
for (i=n-1;i>0;i--)
a[i]=a[i]-a[i-1];
a[0]=0;
--n;
pref();
sol=1;
while (!ok(sol))
++sol;
printf("%d\n",sol);
for (i=1;i<=sol;i++)
printf("%d\n",a[i]);
return 0;
}