C. Harmony Analysis(构造,递推)

直接想会非常棘手

2 n 1 2 n 考虑从2^{n-1}维空间递推到2^n维空间

2 n 1 把2^{n-1}维空间构造得向量看成一个矩阵

2 n , , 2 n 1 那么2^n维空间的合法构造就是左上,右上,左下都放2^{n-1}维的矩阵

2 n 1 右下放2^{n-1}维的矩阵的相反数

0 , 由于取相反数前向量乘积是0,那么取相反数后不改变

2 n 且保证了这2^n个向量两两不相等且合法

#include <bits/stdc++.h>
using namespace std;
const int maxn=509;
int k,a[maxn][maxn];
void dfs(int n,int x,int y,int v)
{
	if( n==1 )	a[x][y]=v;
	else
	{
		dfs(n/2,x,y,v);
		dfs(n/2,x+n/2,y,v);
		dfs(n/2,x,y+n/2,v);
		dfs(n/2,x+n/2,y+n/2,-v);
	}
}
int main()
{
	cin >> k;
	dfs(1<<k,1,1,1);
	for(int i=1;i<=(1<<k);i++)
	for(int j=1;j<=(1<<k);j++)
	{
		if( a[i][j]==1 )	cout << '+';
		else	cout << '*';
		if( j==(1<<k) )	cout << endl;
	}
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/107688716