Cod sursa(job #254700)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 7 februarie 2009 13:47:00
Problema Planeta Scor 0
Compilator c Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.02 kb
#include<stdio.h>
#define infile "planeta.in"
#define outfile "planeta.out"
#define nmax 50
int viz[nmax];
int p[nmax]; //aici vom face permutarea
long long f[nmax]; //aici vom avea factorialul
long long nr,k; //permutarea pe care trebuei sa o facem
int ok;
int n; //lungimea permutarii

void bk(int x)
	{
	int i;
	if(x>n) nr++;
	if(nr==k)
		{
		for(i=1;i<=n;i++)
			printf("%d ",p[i]);
		ok=1;
		}
	else if(x<=n)
		{
		for(i=1;i<=n;i++)
			if(!viz[i]&&!ok)
				{
				p[x]=i; viz[i]=1; 
				bk(x+1);
				viz[i]=0;
				}
		}
	}

int main()
{
int i,j;
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);

scanf("%d %lld",&n,&k);
bk(1);
/*for(f[0]=1,i=1;i<=n;i++) f[i]=i*f[i-1]; //calculam factorialul

for(i=1;i<=n;i++)
	{
	p[i]=(k/f[n-i])+1;
	k-=((p[i]-1)*f[n-i]);
	}
//renumerotam numerele de ordine al permutarii
for(i=n-1;i>=1;i--)
	for(j=i+1;j<=n;j++)
		if(p[j]>=p[i]) p[j]++;
//afisam permutarea
for(i=1;i<=n;i++) printf("%d ",p[i]);*/

fclose(stdin);
fclose(stdout);
return 0;
}