有点自闭的。。为什么我最后的答案是倒着来的啊。。
搞明白了:因为一开始构造的系数就是反着的,,所以主元也倒过来了。。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
int t;
cin>>t;
for(int tt=;tt<=t;tt++){
long long tmp,ans[]={},A[]={};
for(int i=;i<=;i++){
cin>>tmp;
A[i]^=tmp;
}
for(int i=;i<=;i++)
for(int j=;j<=;j++){
int c=(i-)*+j;
A[c]|=<<c;
if(j<=)A[c]|=<<(c+);
if(j>=)A[c]|=<<(c-);
if(i<=)A[c]|=<<(c+);
if(i>=)A[c]|=<<(c-);
}
for(int i=;i<=;i++){
for(int j=i;j<=;j++)
if(A[j]>A[i])swap(A[j],A[i]);
if(A[i]==||A[i]==)break;
for(int k=;k;k--)
if(A[i]>>k & ){
for(int j=;j<=;j++)
if(j!=i && (A[j]>>k & ))A[j]^=A[i];
break;
}
}
printf("PUZZLE #%d\n",tt);
for(int i=;i>=;i--){//为什么答案是倒的啊。。
cout<<(A[i] & );
if(i%==)puts("");
else cout<<" ";
}
}
}