Cod sursa(job #254317)

Utilizator lamez0rBogdan Bondor lamez0r Data 7 februarie 2009 11:10:03
Problema Planeta Scor 0
Compilator c Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 1.02 kb
#include<stdio.h>
#include<stdlib.h>
int n,s[31],uz[31],poz;
long k,nr;

void back1 (int a)
	{
	int i,j;
	if (a==n+1)
		{
		nr++;
		if (nr==k)
			{
			FILE *f=fopen("planeta.out","w");
			for (j=1;j<=n;++j)
				fprintf(f,"%d ",s[j]);
			fclose(f);
			exit(0);
			}
		}
	else
		for (i=1;i<=n;++i)
			if (!uz[i])
				{
				uz[i]=1;
				s[++poz]=i;
				back1(a+1);
				uz[i]=0;
				poz--;
				}
	}

void back2 (int a)
	{
	int i,j;
	if (a==n+1)
		{
		nr++;
		if (nr==k)
			{
			FILE *f=fopen("planeta.out","w");
			for (j=1;j<=n;++j)
				fprintf(f,"%d ",s[j]);
			exit(0);
			}
		}
	else
		for (i=n;i>=1;--i)
			if (!uz[i])
				{
				uz[i]=1;
				s[++poz]=i;
				back2(a+1);
				uz[i]=0;
				poz--;
				}
	}

void solve1 ()
	{
	back1(1);
	}

void solve2 ()
	{
	back2(1);
	}

void read ()
	{
	FILE *f=fopen("planeta.in","r");
	fscanf(f,"%d%ld",&n,&k);
	fclose(f);
	if (n<=10 && k<= 1814400 || n>10)
		solve1 ();
	else
		solve2 ();
	}

int main ()
{
read ();
return 0;
}