Pagini recente » Cod sursa (job #3294184) | Cod sursa (job #528396) | Cod sursa (job #566437) | Cod sursa (job #2497351) | Cod sursa (job #219146)
Cod sursa(job #219146)
#include <stdio.h>
using namespace std;
long l,n,a[500002],p[500002];
void citire();
void prefix();
void afisare();
int main()
{
citire();
prefix();
afisare();
return 0;
}
void citire()
{
//ifstream f("reguli.in");
//f>>n;
freopen("reguli.in","r",stdin);
scanf("%ld",&n);
long x,y;
//f>>x;
scanf("%ld",&x);
for(int i=1;i<n;i++)
{
//f>>y;
scanf("%ld",&y);
a[i]=y-x;
x=y;
}
// f.close();
}
void afisare()
{
// ofstream g("reguli.out");
// g<<l<<endl;
freopen("reguli.out","w",stdout);
printf("%ld\n",l);
for(int i=1;i<=l;i++)
//g<<a[i]<<endl;
printf("%ld\n",a[i]);
// g.close();
}
void prefix()
{
int k=0;
for(int i=2;i<n;i++)
{
int ok=0;
while(k&&a[k+1]!=a[i])
{
k=p[k];
l=i;
ok=1;
}
if(a[k+1]==a[i])
{
k++;
if(ok&&i!=n-1)
l--;
}
p[i]=k;
if(k==0)
l=i;
}
}