Cod sursa(job #2534331)

Utilizator NashikAndrei Feodorov Nashik Data 30 ianuarie 2020 14:08:18
Problema Planeta Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<cstdio>
#define ll long long
ll k;
ll catalan[35];
int rec(ll st,ll dr,ll nr)
{
    ll i;
    if (st>dr)
        return 0;
    if (st==dr)
        {
        printf("%lld ",st);
        return 0;
        }
    for(i=st;i<=dr;i++)
        {
        //printf("%lld\n",catalan[i-st]*catalan[dr-i]*nr);
        if (k>catalan[i-st]*catalan[dr-i]*nr)
            k=k-catalan[i-st]*catalan[dr-i]*nr;
        else
            break;
        }
    printf("%lld ",i);
    ll cnr=nr;
    rec(st,i-1,nr*catalan[dr-i]);
    rec(i+1,dr,cnr);
}
int main()
{
    freopen("planeta.in","r",stdin);
    freopen("planeta.out","w",stdout);
    ll n;
    scanf("%lld%lld",&n,&k);
    ll i,j;
    catalan[0]=1;
    catalan[1]=1;
    for(i=2;i<=30;i++)
        for(j=0;j<=i;j++)
            catalan[i]+=catalan[j]*catalan[i-1-j];
   //for(i=1;i<=30;i++)
       // printf("%lld\n",catalan[i]);
    rec(1,n,1);
return 0;
}