Cod sursa(job #2212622)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 14 iunie 2018 15:40:25
Problema Planeta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>

using namespace std;
FILE *fin=fopen ("planeta.in","r");
FILE *fout=fopen ("planeta.out","w");
long long d[31];
void af (long long k,int n,int start){
    int i,r;
    long long sum=0;
    //printf ("%lld %d %d\n",k,n,start);
    if (n<=0 || k<=0)
        return;
    for (i=1;i<=n && sum<k;i++)
        sum+=d[i-1]*d[n-i];
    r=i-1;
    sum=sum-d[i-2]*d[n-i+1];
    k-=sum;
    fprintf (fout,"%d ",start+r-1);
    //if (start+r-1==15)
      //  printf ("a");
    af (k/d[n-r] + (k%d[n-r]!=0),r-1,start);

    if (k%d[n-r]==0)
        af(d[n-r],n-r,start+r);
    else
        af (k%d[n-r],n-r,start+r);
}
int main()
{
    int n,i,j;
    long long k;
    fscanf (fin,"%d%lld",&n,&k);
    d[0]=1;
    // d[i] = cati arb de caut cu i noduri
    for (i=1;i<=n;i++){
        for (j=1;j<=i;j++)
            d[i]=d[i]+ d[j-1]*d[i-j];
    }
    af (k,n,1);
    return 0;
}