Pagini recente » Borderou de evaluare (job #2798889) | Cod sursa (job #2715119) | Cod sursa (job #541181) | Cod sursa (job #2602060) | Cod sursa (job #985119)
Cod sursa(job #985119)
#include<stdio.h>
#define maxn 500005
using namespace std;
int n,sol,lmax;
int p[maxn],pend[maxn];
long long a[maxn];
void read()
{
long long x,y;
scanf("%d%lld",&n,&x);
for(int i=2;i<=n;i++)
scanf("%lld",&y),a[i-1]=y-x,x=y;
n--;
}
void solve()
{
int i,k=0;
p[1]=0;
for(i=2;i<=n;i++)
{
while(a[k+1]!=a[i] && k) k=p[k];
if(a[k+1]==a[i]) k++;
p[i]=k;
}
for(k=p[n];k!=0;k=p[k])
{
pend[k]=1;
if(k<=n/2 && k>lmax) lmax=k;
}
for(i=1;i<=n;i++)
if(p[i] && i%(i-p[i])==0 && n-i<=i-p[i] && pend[n-i]){
sol=i-p[i]; return;
}
sol=n-lmax;
}
void print()
{
printf("%d\n",sol);
for(int i=1;i<=sol;i++) printf("%lld\n",a[i]);
}
int main()
{
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
read();
solve();
print();
fclose(stdin);
fclose(stdout);
return 0;
}