Cod sursa(job #1704891)

Utilizator tudorgalatanRoman Tudor tudorgalatan Data 19 mai 2016 15:45:30
Problema Reguli Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.44 kb
#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;
}