Cod sursa(job #421569)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 21 martie 2010 14:41:57
Problema Copii Scor 100
Compilator cpp Status done
Runda Algoritmiada 2010, Runda 4, Clasele 5-8 Marime 0.73 kb
#include<stdio.h>
char s[100];
long nc,p[100],q[100],nr,n,a[100],i,j;
void soll()
{long i,c;
 for(i=1;i<=nc;++i)
    for(j=1;j<=nc;++j)
       if(i!=j)
         if((q[i]&p[j])==0)return;
 ++nr;
}
void gp(long k)
{long j;
 if(k-1==n){if(nc>1)soll();}
 else
 {for(j=1;j<=nc;++j)
     {long pp=p[j];
      p[j]|=(1<<(k-1));
      long qq=q[j];
      q[j]|=a[k];
      gp(k+1);
      p[j]=pp;
      q[j]=qq;}
  ++nc;
  p[nc]=(1<<(k-1));
  q[nc]=a[k];
  gp(k+1);
  --nc;}}
int main()
{
 freopen("copii.in","r",stdin);
 freopen("copii.out","w",stdout);
 scanf("%ld\n",&n);
 for(i=1;i<=n;++i)
    {gets(s);
     for(j=1;j<=n;++j)
        if(s[j-1]=='1')a[i]|=(1<<(j-1));}
 gp(1);
 printf("%ld\n",nr);
 return 0;
}