Cod sursa(job #591081)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 22 mai 2011 10:23:25
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<iostream>
#include<fstream>
using namespace std;
int sol[9],n,pri[11][11],a1,a2,a3,nr;
bool marcat[9],marcat2[11];
ifstream aa("copii.in");
ofstream ss("copii.out");

void back(int p);
void verifica();

int main () {
	aa >> n;
	for (int i=1;i<=n;++i) {
		aa >> a1;
		a2=0;
		while (a1) {
			++a2;
			pri[i][a2]=a1%10;
			a1/=10;
		}
	}
	back(1);
	ss << nr;
	aa.close();
	ss.close();
	return 0;
}

void verifica(){
	int a=0,j,k,aaa=0;
	a=n/2;
	for (j=1;j<=a;++j) {
		for (k=1;k<=n;++k)
			if (pri[j][k]) {
				marcat2[k]=true;
			}
	}
	for (j=1;j<=n;++j) {
		if (!marcat2[j]) {
			aaa=1;
			break;
		}
		marcat2[j]=false;
	}
	if (aaa) return;
	for (j=a+1;j<=n;++j) {
		for (k=1;k<=n;++k)
			if (pri[j][k]) {
				marcat2[k]=true;
			}
	}
	for (j=1;j<=n;++j) {
		if (!marcat2[j]) {
			aaa=1;
			break;
		}
		marcat2[j]=false;
	}
	if (aaa) return;
	++nr;
}

void back(int p) {
	int i;
	if (p>n) {
		verifica();
		return;
	}
	for(i=1;i<=n;++i) {
		if (!marcat[i]){
			sol[p]=i;
			marcat[i]=true;
			back(p+1);
			marcat[i]=false;
		}
	}
}