0w1

CFR 610 C. Harmony Analysis ( Ad hoc )

Problem - C - Codeforces
這題需要的是一點直覺,或說是靈感。要發現其實只要遞迴構造左上右上左下都相同的,而右下正負相反,初始是n = 0時為+。

#include <bits/stdc++.h>
using namespace std;
const int MAXK = 9 + 1;

int a[ 1 << MAXK ][ 1 << MAXK ];

int main(){
    int n; scanf("%d", &n);
    a[ 0 ][ 0 ] = 1;
    for( int i = 0; i < n; ++i ){
        for( int j = 0; j < ( 1 << i ); ++j )
            for( int k = 0; k < ( 1 << i ); ++k )
                a[ ( 1 << i ) + j ][ k ] =
                a[ j ][ ( 1 << i ) + k ] = a[ j ][ k ],
                a[ ( 1 << i ) + j ][ ( 1 << i ) + k ] = -a[ j ][ k ];
    }
    for( int i = 0; i < ( 1 << n ); ++i, puts("") )
        for( int j = 0; j < ( 1 << n ); ++j )
            printf("%c", a[ i ][ j ] == 1 ? '+' : '*');
    return 0;
}