Pagini recente » Cod sursa (job #2799868) | Cod sursa (job #781441) | Cod sursa (job #1665605) | Cod sursa (job #2187162) | Cod sursa (job #254317)
Cod sursa(job #254317)
#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;
}