CDMA:https://ac.nowcoder.com/acm/contest/888/C
黑洞内窥:
输入数m,求一个m*m的-1,1矩阵
该矩阵满足任意两行对应项的积之和为0
m恒为2的幂次方,且小于2^10
思维光年:
这个有点像线代中的单位基,只不过不同的是元素都为-1和1
我们把题目中给出的m=2 的答案看做1 再组一个
把 m=4 的答案看做1 再组一个
依次类推到10.。。。
ACcode:
(队友敲的)
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<map>
#include<string>
#include<cstring>
#include<stack>
using namespace std;
int a[5][5] = {{0,0,0,0,0},{0,-1,-1,1,1},{0,-1,1,-1,1},{0,1,-1,-1,1},{0,-1,-1,-1,-1}};
int b[2000][2000],x,m;
void unionz(int x)
{
for(int i = 1;i <= x; ++i)
for(int j = 1;j <= x; ++j)
{
b[i][j + x] = b[i + x][j + x] = b[i][j];
b[i + x][j] = -b[i][j];
}
}
int main()
{
scanf("%d",&m);
if(m == 2) printf("1 1\n1 -1\n");
else
{
x = 4;
for(int i = 1; i <= 4; ++i)
for(int j = 1; j <= 4; ++j)
b[i][j] = a[i][j];
while(m > x) unionz(x),x *= 2;
for(int i = 1;i <= m; ++i)
for(int j = 1;j <= m; ++j)
{
printf("%d",b[i][j]);
if(j == m) printf("\n");
else printf(" ");
}
}
return 0;
} 
京公网安备 11010502036488号