Pagini recente » Cod sursa (job #712624) | Cod sursa (job #2417925) | Clasamentul arhivei de probleme | Cod sursa (job #685460) | Cod sursa (job #514270)
Cod sursa(job #514270)
#include<stdio.h>
#define NMAX 500006
#define minim(a,b) (a<b ? a : b)
#define ll long long
ll v[NMAX];
int pi[NMAX],n,sol;
char viz[NMAX];
int main ()
{
int i,q=0,val;
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%lld",&v[i]);
for(i=1;i<n;i++)
v[i]=v[i+1]-v[i];
n--;
q=0;
for(i=2;i<=n;i++)
{
while(q>0 && v[q+1]!=v[i])
q=pi[q];
if(v[q+1]==v[i])
q++;
pi[i]=q;
}
val=pi[n];
while(val)
{
viz[n-val+1]=1;
val=pi[val];
}
sol=n;
for(i=1;i<=n;i++)
if(pi[i] && i%(i-pi[i])==0 && viz[i+1])
sol=minim(sol,pi[i]);
printf("%d\n",sol);
for(i=1;i<=sol;i++)
printf("%lld\n",v[i]);
return 0;
}