Cod sursa(job #966705)

Utilizator BlackElfSpulber Iosif BlackElf Data 26 iunie 2013 14:49:06
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

struct instance 
{
	int N;
	int K;
};

typedef vector<int> config;

ofstream out ("combinari.out");

config root (instance P)
{
	config c;
	return c;
}

int bad (config c)
{
	return !c.empty() && c[0] == -1;
}

int reject (instance P, config c)
{
	if (c.size() > P.K)
		return true;
	
	for (int i = 0; i < (int) c.size() - 1; i++)
		if (c[i] == c.back())
			return true;
	
	return false;
}

int accept (instance P, config c)
{
	return c.size() == P.K;
}

config first (instance P, config c)
{
	if (c.size () >= P.K)
	{
		//return bad config
		config b;
		b.push_back(-1);
		return b;
	}
	
	c.push_back(1);
	
	return c;
}

config next (instance P, config c)
{
	if (c.back() >= P.N)
	{
		//return bad config
		config b;
		b.push_back(-1);
		return b;
	}
	
	c.back() ++;
	
	return c;
}

void output (instance P, config c)
{
	for (int i = 0; i < c.size(); i++)
		out << c[i] << ' ';
	out << endl;
}

void bt (instance P, config c)
{
	if (reject (P, c))
		return;
	if (accept (P, c))
		output (P, c);
	
	config s;
	s = first (P, c);
	while (!bad(s))
	{
		bt (P, s);
		s = next (P, s);
	}
}

int main ()
{
	ifstream in ("combinari.in");
	
	instance P;
	in >> P.N >> P.K;
	
	bt (P, root(P));
	
	return 0;
}