Cod sursa(job #2087869)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 14 decembrie 2017 14:19:00
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int d[105],i,j,n;
vector <int> v[105],sol;

void solve(int i, int j, int val)
{
    int x;
    for(x=0;x<v[i].size();x++)
        v[val].push_back(v[i][x]*j);
    for(x=1;x<j;x++)
        v[val].push_back(j);
}

void rez(int n)
{
    if(n>99)
    {
        if(n%2==1)
            rez((n-9)/2);
        else
            rez((n-8)/2);
        for(int x=0;x<sol.size();x++)
            sol[x]*=2;
        if(n%2==1)
        {
            sol.push_back(3);sol.push_back(6);
        }
        else
        {
            sol.push_back(4);sol.push_back(4);
        }
    }
    else
    {
        for(int x=0;x<v[n].size();x++)
            sol.push_back(v[n][x]);
    }
}

int main()
{
    d[1]=1;
    v[1].push_back(1);
    for(i=1;i<=99;i++)
    {
        if(d[i]==1)
        {
            j=2;
            while(j*i+j*(j-1)<=99)
            {
                if(d[j*i+j*(j-1)]==1)
                {
                    j++;
                    continue;
                }
                d[j*i+j*(j-1)]=1;
                solve(i, j, j*i+j*(j-1));
                j++;
            }
        }
    }
    fin>>n;
    rez(n);
    for(int x=0;x<sol.size();x++)
        fout<<sol[x]<<" ";
    fin.close();
    fout.close();
    return 0;
}