Advertisement
Guest User

Untitled

a guest
May 21st, 2019
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 16;
  4.  
  5. int clr[ N ][ N ][ 2 ];
  6. int dp[ 2 ][ 1 << N ];
  7.  
  8. int main() {
  9.     ios_base::sync_with_stdio( false );
  10.     cin.tie( nullptr );
  11.  
  12.     int n, mod; cin >> n >> mod;
  13.  
  14.     auto sets = [ n ] ( int s, int p, int x ) {
  15.         if ( p < 0 ) return s;
  16.         return x ? ( s | ( 1 << p ) ) : ( s & ( ( 1 << n ) - 1 - ( 1 << p ) ) );
  17.     };
  18.     auto adde = [ mod ] ( int& a, int b ) {
  19.         a += b; if ( a >= mod ) a -= mod;
  20.     };
  21.  
  22.     for ( int i = 0 ; i < n ; ++ i )
  23.         for ( int j = 0 ; j < n ; ++ j )
  24.             for ( int _ = 0 ; _ < 2 ; ++ _ )
  25.                 cin >> clr[ i ][ j ][ _ ];
  26.  
  27.     const int n2 = 1 << n;
  28.     int me = 0, he = 1;
  29.     dp[ he ][ 0 ] = dp[ he ][ 1 ] = 1;
  30.     for ( int i = 0 ; i < n ; ++ i ) {
  31.         for ( int j = 0 ; j < n ; ++ j ) {
  32.             if ( not i and not j ) continue;
  33.             for ( int s = 0 ; s < n2 ; ++ s ) {
  34.                 int cur_color = clr[ i ][ j ][ ( s >> j ) & 1 ];
  35.                 if ( j and clr[ i ][ j - 1 ][ ( s >> ( j - 1 ) ) & 1 ] == cur_color )
  36.                     continue;
  37.                 for ( int _ = 0 ; _ < 2 ; ++ _ )
  38.                     if ( cur_color != ( i ? clr[ i - 1 ][ j ][ _ ] : -1 ) )
  39.                         adde( dp[ me ][ s ], dp[ he ][ sets( s, j, _ ) ] );
  40.             }
  41.             memset( dp[ he ], 0, sizeof( dp[ he ] ) );
  42.             swap( me, he );
  43.         }
  44.     }
  45.  
  46.     int ans = 0;
  47.     for ( int s = 0 ; s < n2 ; ++ s )
  48.         adde( ans, dp[ he ][ s ] );
  49.     cout << ans << '\n';
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement