Cod sursa(job #1583334)

Utilizator gabib97Gabriel Boroghina gabib97 Data 28 ianuarie 2016 21:31:02
Problema Planeta Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>

using namespace std;
long long n,k,i,d[31][31][31],s[31][31];
ifstream fin ("planeta.in");
ofstream fout ("planeta.out");
void dinamica()
{
    int i,j,l;
    for (i=1;i<=n;i++)
    {
        d[i][i][i]=1;
        s[i][i]=s[i][i-1]=1;
    }
    s[n+1][n]=1;
    for (l=2;l<=n;l++)
    {
        for (i=1;i<=n-l+1;i++)
            for (j=i;j<=i+l-1;j++)
                {
                    d[i][i+l-1][j]=s[i][j-1]*s[j+1][i+l-1];
                    s[i][i+l-1]+=d[i][i+l-1][j];
                }
    }
}
void FindRoot(int a,int b,long long k)
{
    int i,ad=0;
    for (i=a;ad+d[a][b][i]<k&&i<b;i++)
        ad+=d[a][b][i];
    fout<<i<<" ";
    if (a<=i-1) FindRoot(a,i-1,(k-ad)/s[i+1][b]);
    if (i+1<=b) FindRoot(i+1,b,(k-ad)%s[i+1][b]);
}
int main()
{
    fin>>n>>k;
    dinamica();
    FindRoot(1,n,k);
    fin.close();
    fout.close();
    return 0;
}