今天牛客有个构造多维正交矩阵的题,以CDMA码分多址为背景。
附上大佬的博客
#include <stdio.h>
#include <string.h>
const int MAXN=1e3+55;
int hmat[MAXN][MAXN],n;
void Hadamard(int n){
for(int i=0;i<n;++i)
for(int j=0;j<n;++j){
int cnt=0;
for(int k=i&j;k;k>>=1) cnt+=k&1;
hmat[i][j]=((cnt&1)?-1:1);
}
}
int main(){
scanf("%d",&n);
Hadamard(n);
for(int i=0;i<n;++i){
for(int j=0;j<n;++j) printf("%d ",hmat[i][j]);
puts("");
}
return 0;
}
然后我搜了搜资料,这个东西叫做Hadamard矩阵,咱也不知道是咋构造出来的,函数是网上找的,估计现场赛也不会写。先码一下。