Cod sursa(job #162101)

Utilizator reSpawnPopescu Ioan reSpawn Data 19 martie 2008 14:32:42
Problema Combinari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
// http://infoarena.ro/problema/combinari
#include <stdio.h>

char st[18];
int N, K;

/*void init( char k )
{
	st[k] = 0;
}*/

inline char succesor( char k )
{
	if( k < N && st[k] < N )
	{
		st[k]++;
		return 1;
	}
	return 0;
}

inline char valid( char k )
{
	static char i;
	for( i = 0; i < k; ++i )
	{
		if( st[k] <= st[i] )
			return 0;
	}
	return 1;
}

inline char solutie( char k )
{
	if( k == K-1 )
		return 1;
	return 0;
}

inline void tiparire( )
{
	static char i;
	printf( "%d", st[0] );
	for( i = 1; i < K; ++i )
		printf( " %d", st[i] );
	printf("\n");
}

int main()
{
	freopen( "combinari.in", "r", stdin );
	freopen( "combinari.out", "w", stdout );

	scanf( "%d %d", &N, &K );

	char k = 0, as = 0, ev = 0;
	//init( k );
	st[0] = 0;
	while( k >= 0 )
	{
		do
		{
			as = succesor( k );
			if( as )
				ev = valid( k );
		} while( as && !ev );
		if( as )
		{
			//if( solutie( k ) )
			if( k == K-1 )
				tiparire();
			else
				st[++k] = 0;
				//init( ++k );
		}
		else
			--k;
	}

	return 0;
}