Pagini recente » Cod sursa (job #1754874) | Cod sursa (job #1634433) | Cod sursa (job #1680828) | Cod sursa (job #78031) | Cod sursa (job #2487935)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("reguli.in");
ofstream g("reguli.out");
long long n,a, b, dif[500005], ind;
long long prefix[500005];
bool verif(long long indice)
{
if (indice==ind-1 && dif[ind]==dif[1])
return true;
for (long long i=indice+1; i<=ind; ++i)
{
if (prefix[i]<=prefix[i-1])
return false;
}
return true;
}
void create_prefix()
{
long long poz;
prefix[1]=0;
for (long long i=2; i<=ind; ++i)
{
poz=prefix[i-1];
while (poz!=0)
{
if (dif[i]==dif[poz+1])
{
prefix[i]=poz+1;
break;
}
poz=prefix[poz];
}
if (poz==0)
{
if (dif[1]==dif[i])
prefix[i]=1;
else
prefix[i]=0;
}
}
long long aux;
for (long long i=1; i<=ind; ++i)
{
if (verif(i))
{
g << i << '\n';
for (long long j=1; j<=i; j++)
g << dif[j] << '\n';
return;
}
}
}
int main( )
{
f >> n;
f >> a;
for (long long i=2; i<=n; ++i)
{
f >> b;
dif[++ind]=b-a;
a=b;
}
create_prefix();
return 0;
}