Cod sursa(job #481077)

Utilizator darrenRares Buhai darren Data 30 august 2010 15:13:19
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

using namespace std;

int n, m;
char a[10][10];
int v[11], ntot;

void Back(int k);
void Test();

int main()
{
	ifstream fin("copii.in");
	ofstream fout("copii.out");

	fin >> n;

	for (int i = 0; i < n; ++i)
		fin >> a[i];
	for (int i = 2; i <= n; ++i)
	{
		m = i;
		Back(1);
	}
	fout << ntot;

	fin.close();
	fout.close();
}

void Back(int k)
{
	for (int i = v[k - 1] + 1; i <= n - m + k; ++i)
	{
		v[k] = i;

		if (k == m) Test();
		else        Back(k + 1);
	}
}

void Test()
{
	v[m + 1] = n + 1;
	for (int i = 1; i <= m; ++i)
		for (int k = 1; k <= m; ++k)
			if (i != k)
			{
				bool ok = false;
				for (int j = v[i]; j < v[i + 1]; ++j)
					for (int l = v[k]; l < v[k + 1]; ++l)
						if (a[j - 1][l - 1] == '1')
							ok = true;
				if (ok == false) return;
			}
	++ntot;
}