Cod sursa(job #268125)

Utilizator ooctavTuchila Octavian ooctav Data 28 februarie 2009 20:22:30
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<stdio.h>

const int D=11;
const int N=23;
const int M=9;

int a[N][D],n,d,m,sol[N];
char disc[D];
int toate()
{
	int i;
	for(i=1;i<=d;i++)
		if(!disc[i])
			return 0;
	return 1;
}
void afisare()
{
	for(int i=1;i<=m;i++)
		printf("%d ",sol[i]);
	printf("\n");
}
void copie_disc(char aux[12], char disc[12])
{
	for(int i=1;i<=d;i++)
		aux[i]=disc[i];
	
}
void actualizare_disc(int i)
{
	int j;
	for(j=1;j<=a[i][0];j++)
		disc[a[i][j]]=1;
	
}

void back(int k)//aleg al k-lea elev din echipa
{
	if(k==m+1)
	{
		if(toate())//daca echipa curenta acopera toate disciplinele (char[i]==1 pt fiecare 1<=i<=d)
			afisare();
		return;
	}
	int i;
	char aux[D];
	for(i=sol[k-1]+1 ; i<=n-m+k ; ++i)
	{
		sol[k]=i;
		copie_disc(aux,disc);
		actualizare_disc(i);
		back(k+1);
		copie_disc(disc,aux);
	}
}

int main()
{
	int i,j;
	freopen("pluricex.in","r",stdin);
	freopen("pluricex.out","w",stdout);
	scanf("%d%d%d",&n,&m,&d);
	for(i=1;i<=n;++i)
	{
		scanf("%d",&a[i][0]);//la cate materii
		for(j=1;j<=a[i][0];++j)
			scanf("%d",&a[i][j]);
	}
	back(1);
	return 0;
}