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; }