Pagini recente » Cod sursa (job #1635170) | Cod sursa (job #1593927) | Cod sursa (job #685748) | Cod sursa (job #1676572) | Cod sursa (job #392279)
Cod sursa(job #392279)
#include<stdio.h>
#define Nmax 500005
int a[Nmax],n,D[Nmax],l,pi[Nmax];
int verific(int r,int z)
{int i;
for(i=n-r+1;i<=n;i++)
if(D[i]!=D[i%z])
return 0;
return 1;}
int main()
{freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
int i;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
n--;
for(i=1;i<=n;i++)
D[i]=a[i+1]-a[i];
pi[1]=0;int q=0,r=0,c=0,ha=1;
for(i=2;i<=n;i++)
{ while(q && D[q+1]!=D[i])
q=pi[q];
if(D[q+1]==D[i])
q++;
pi[i]=q;
// printf("%d ",pi[i]);
}
l=n;
for(i=2;i<=n;i++)
{r=n%i;
c=n/i;
ha=n-r-pi[n-r];
// printf("%d %d %d %d\n",i,r,c,ha);
if(pi[n-r] && ha*c==n-r && verific(r,i))
{l=i;break;}
}
printf("%d\n",l);
for(i=1;i<=l;i++)
printf("%d\n",D[i]);
fclose(stdin);
fclose(stdout);
return 0;
}