Cod sursa(job #2194014)

Utilizator SanducCristiCristi Sanduc SanducCristi Data 11 aprilie 2018 22:26:09
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<cstdio>
long long v[500005],z[500005];
int main(){
freopen("reguli.in","r",stdin);
freopen("reguli.out","w",stdout);
long long n,i,j,k;
scanf("%lld",&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--;
long long l=0,r=0;
for(i=2;i<=n;i++){
if (i>r){
l=i;
r=i;
while(r<=n && v[r]==v[r-(l-1)])
r++;
r--;
z[i]=r-l+1;}
else{
k=i-(l-1);
if (z[k]<r-i+1)
z[i]=z[k];
else{
l=i;
while(r<=n && v[r]==v[r-(l-1)])
r++;
r--;
z[i]=r-l+1;}}}
for(i=2;i<=n;i++)
if (z[i]==n-i+1){
printf("%lld\n",i-1);
for(j=1;j<i;j++)
printf("%lld\n",v[j]);
return 0;}
printf("%lld\n",n);
for(j=1;j<=n;j++)
printf("%lld\n",v[j]);
return 0;}