Cod sursa(job #530238)

Utilizator lianaliana tucar liana Data 7 februarie 2011 11:58:08
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>

long int i, j, nr, rez, n, lg;
long int v[12], pe[12], o[12];
bool ok;
char s[12];

void citire()
{
	scanf("%ld",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%s",&s);
		nr=0;
		for (i=0;i<n;i++)
			nr+=1<<(i+1);
		v[i]=nr;
	}
}


void verificare()
{
	ok=true;
	for (i=1;i<=lg;i++)
		for (j=1;j<=lg;j++)
			if (i!=j)
				if (pe[i] & o[j]==0)
				{	break; ok=0; }
	rez+=ok;			
}

void gen(long int poz)
{
	long int pran;
	if (poz==n+1)
		verificare();
	else
	{
		for (i=1;i<=lg;i++)
		{
			o[i]=o[i]+(1<<i); pran=pe[i]; pe[i]=pe[i] | v[poz];
			gen(poz+1);
			o[i]=o[i]-(1<<i); pe[i]=pran;
		}
		o[++lg]=1<<i; pe[lg]=v[poz]; 
		gen(poz+1); 
		lg--;
	}
	
}

int main()
{
	freopen("copii.in","r",stdin); 
	freopen("copii.out","w",stdout);
	citire();
	gen(1);
	printf("%ld",rez-1);
	return 0;
}