Pagini recente » Cod sursa (job #1596820) | Cod sursa (job #1672697) | Cod sursa (job #2363451) | Cod sursa (job #2612527) | Cod sursa (job #1518283)
#include <iostream>
#include <cstdio>
#define lim 500100
using namespace std;
long long maxim,dif[lim],pref[lim],x,y;
int n;
int prefix()
{
int i=1,j=2;
pref[1]=1;
while (j<n)
{
pref[j]=1;
if (dif[i]!=dif[j])
if (i!=1)
i=pref[i-1];
else
++j;
else
{
pref[j]=i+1;
if (pref[j]>maxim)
maxim=pref[j];
++i;
++j;
}
}
for(int m=n; m>0; --m)
if ( pref[m] && m+1-pref[m] && ((m+1)%(m+1-pref[m]))==0)
return maxim=m+1-pref[m];
return 0;
}
int main()
{
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
scanf("%d",&n);
for (int i=0;i<n;++i)
{
scanf("%d",&y);
dif[i]=y-x;
x=y;
}
int lun=prefix();
printf("%d\n",lun);
for (int i=1;i<=lun;++i)
printf("%d\n",dif[i]);
return 0;
}