H - Harmony Analysis
给你一个k
求一个由 * + 组成的 2^k *2^k 的矩阵
条件是 任意两行 对应项乘积的和 为0 + 为 +1 * 为-1
+
++
+*
++++
+*+*
++**
+**+
右上角 = 左下角 = 左上角 右下角 =左上角取反
#include<stdio.h> #include<algorithm> #include<string.h> #include<math.h> #include<queue> #include<set> #include<map> using namespace std; #define ll long long #define inf 1e15+7 #define MAXN 1000010 #define exp 1e-4 bool z[1050][1050]; int main() { int k; z[1][1]=1; for(int i=1;i<=9;i++) { int a=1<<(i-1); int b=1<<(i); for(int k=1;k<=a;k++) for(int j=a+1;j<=b;j++) { z[a+k][j-a]=z[k][j]=z[k][j-a]; z[a+k][j]=!z[k][j-a]; } } while(scanf("%d",&k)!=EOF) { int en=1<<k; for(int i=1;i<=en;i++) { for(int j=1;j<=en;j++) if(z[i][j]==1) printf("+"); else printf("*"); printf("\n"); } } return 0; }