Pagini recente » Cod sursa (job #585553) | Cod sursa (job #1818584) | Monitorul de evaluare | Cod sursa (job #199648) | Cod sursa (job #1535200)
#include <cstdio>
#define in "reguli.in"
#define out "reguli.out"
#define NMAX 500007
#define LL long long
#define DIM 100007
using namespace std;
int n, sol, poz;
LL v[NMAX], phi[NMAX];
char buff[DIM];
inline void citire(int &nr)
{
nr = 0;
while(buff[poz] < '0' || buff[poz] > '9')
{
++poz;
if(poz == DIM)
{
poz = 0;
fread(buff, 1, DIM, stdin);
}
}
while(buff[poz] <= '9' && buff[poz] >= '0')
{
nr = nr*10 + buff[poz] - '0';
++poz;
if(poz == DIM)
{
poz = 0;
fread(buff, 1, DIM, stdin);
}
}
}
inline void citire2(LL &nr)
{
nr = 0LL;
while(buff[poz] < '0' || buff[poz] > '9')
{
++poz;
if(poz == DIM)
{
poz = 0;
fread(buff, 1, DIM, stdin);
}
}
while(buff[poz] <= '9' && buff[poz] >= '0')
{
nr = nr*10LL + buff[poz] - '0';
++poz;
if(poz == DIM)
{
poz = 0;
fread(buff, 1, DIM, stdin);
}
}
}
inline void solve()
{
int k = 0;
for(int i = 2; i<= n; ++i)
{
while(k && v[k+1] != v[i]) k = phi[k];
if(v[k+1] == v[i]) ++k;
phi[i] = k;
}
}
int main()
{
freopen(in, "r", stdin);
freopen(out, "w", stdout);
citire(n);
for(int i = 1; i<= n; ++i) citire2(v[i]);
for(int i = 2; i<= n; ++i) {v[i-1] -= v[i]; v[i-1]*=(-1);}
--n;
solve();
sol = n - phi[n];
printf("%d\n", sol);
for(int i = 1; i<= sol; ++i) printf("%lld\n", v[i]);
return 0;
}