Pagini recente » Cod sursa (job #1036812) | Cod sursa (job #2202314) | Cod sursa (job #2261043) | Cod sursa (job #1309564) | Cod sursa (job #24714)
Cod sursa(job #24714)
#include <stdio.h>
#include <vector>
#include <iterator>
using namespace std;
#define in "reguli.in"
#define out "reguli.out"
vector<long long> a;
vector<long> v;
int n, k;
int dr, st;
void ReadData();
int BS();
void Solve();
int Ok(int);
int main()
{
ReadData();
Solve();
}
void ReadData()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d", &n);
a.resize(n+1);
v.resize(n+1);
scanf("%d", &v[1]);
for ( int i = 2; i <= n; i++ )
{
scanf("%d",&v[i]);
a[i-1] = v[i] - v[i-1];
}
}
void Solve()
{
int t = BS();
// printf("%d ", Ok(3));
printf("%d\n", t);
for ( int i = 1; i <= t; i++ )
printf("%d\n",a[i]);
}
int BS()
{
int val = 1;
/*while ( st <= dr )
{
int mij = (st+dr)/2;
// printf("%d ", mij );
if ( !Ok(mij) )
{
st = mij + 1;
}
else
{
if ( val > mij ) val = mij;
dr = mij - 1;
}
}*/
bool gasit = 0;
while ( !gasit && val <= n-1 )
{
if ( Ok(val) ) gasit = 1;
else val++;
}
return val;
}
int Ok(int k)
{
int maxim=0;
for ( int i = 1; i <= k; i++ )
{
for ( int j = i; j < n; j+= k )
{
if ( a[i] != a[j] ) return 0;
// if ( i == k ) maxim = j;
}
}
/* if ( maxim == 0 ) return 1;
else
{
for ( int i = 1, j = maxim; j <= n; i++, j++ )
{
if ( a[i] != a[j] ) return 0;
}
}*/
return 1;
}