Pagini recente » Cod sursa (job #1143344) | Cod sursa (job #1306479) | Cod sursa (job #1520255) | Istoria paginii utilizator/akasoare | Cod sursa (job #1704891)
#include <fstream>
#include <climits>
#define InFile "reguli.in"
#define OutFile "reguli.out"
#define MAX 500001
using namespace std;
unsigned int N;
long long int x[MAX];
long long int a[MAX], x1[MAX];
long long int i, k, j, cnt, K, aux;
int main ()
{
/// Read
ifstream fin (InFile);
fin >> N;
for (i=0; i<=N; i++)
fin >> x[i];
fin.close();
/// Initialization
for (i=1; i<=N; i++)
{
a[i] = 0;
x1[i] = 0;
}
K = 0;
cnt = 0;
/// Solve
for (k=1; k<=N; k++)
for (i=1; i<=N; i++)
{
if (i%k != 0)
x1[i] = x1[i-1] + a[i%k];
else
x1[i] = x1[i-1] + a[k];
if (x1[i] == x[i])
{
cnt++;
if (i%k != 0)
a[i%k] = x1[i] - x1[i-1];
else
a[k] = x1[i] - x1[i-1];
K = k;
//k++;
break;
}
else
{
if (i%k != 0)
a[j%k]++;
else
a[k]++;
continue;
}
}
/*
for (i=1; i<=N; i++)
a[i] = x[i] - a[i];
*/
/*
/// Sort
for (i=1; i<=K+1; i++)
if (a[i] < a[i-1])
{
aux = a[i];
a[i] = a[i-1];
a[i-1] = aux;
}
*/
/// Delete
for (j=1; j<=K; j++)
for (i=1; i<=K; i++)
if (a[i] == a[i-1])
{
aux = a[i];
a[i] = a[i-1];
a[i-1] = aux;
K--;
}
/*
for (k=1; k<=N; k++)
//for (i=1; i<=N; i++)
for (j=2; j<=N; j++)
{
cnt = 0;
if (i%k != 0)
{
if (x[j] == x[j-1] + a[i%k])
{
a[i%k] = x[j] - x[j-1];
cnt++;
}
}
else if (i%k == 0)
{
if ()
}
if (cnt == N-1)
break;
}
*/
/// Print
ofstream fout (OutFile);
fout << K << '\n';
for (i=K; i>=1; i--)
fout << a[i] << '\n';
fout.close();
return 0;
}