Cod sursa(job #2475893)

Utilizator miruna1224Floroiu Miruna miruna1224 Data 17 octombrie 2019 18:59:21
Problema Copii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

vector<int> sol ( 15, 0 );
vector<int> v;
int n, grupuri;


void verif ( ){
  vector< vector<bool> > m ( n + 1, vector<bool> (n + 1));
  int i, j;

  for ( i= 0 ;i < n ; i++ )
    for ( j = 0; j < n; j++ )
      m[sol[i]][sol[j]] = ( i == ( i & (1 << j)) ? 1 : 0 );

    for ( i= 0 ;i < n/2 ; i++ )
      for ( j = 0; j < n/2  ; j++ )
        if ( m[i][j] != m[j][i]){
          return;
        }
    grupuri++;
}


void bkt( int k ){
  if ( k == n ){
    verif();
    return;
  }
  sol[k]++;
  bkt( k + 1 );
  sol[k]--;
}

int main(){

  int  i, j, nr, x;
  char ch;

  ifstream in ("copii.in");
  in >> n;

  for ( i = 0; i < n; i++ ){
    x = 0, nr = 0;
    for ( j = 0; j < n; j++ ){
      in >> ch;
      if ( ch == '1' )
        x = (x | ( 1 << nr));
      nr++;
    }
    v.push_back( x );
  }
  in.close();


  for ( i = 0; i < n; i++ )
    bkt(i);


  ofstream out ( "copii.out" );
  out << grupuri;
  out.close();


  return 0;
}