Pagini recente » Cod sursa (job #81805) | Cod sursa (job #299210) | Cod sursa (job #2639477) | Cod sursa (job #704134) | Cod sursa (job #591081)
Cod sursa(job #591081)
#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;
}
}
}