AT_zone2021_f题解
此题需要用到异或,没学过异或的人可以去百度上搜索。
进入正题,这题有很多的异或结果,我们除了
此题有 -1 的结果,我们可以看到,输出 -1 的条件是:没有存在线性基。
总结
将 -1,否则输出他最大位数上的原数。
代码
两个自定义函数的代码(如上定义):
void js1(int a){
int t=a;
for(int i=1;~i;i--){
if((a&(1<<i))>0){
if(!p[i]){
p[i]=a;
o[i]=t;
return ;
}
else a=a^p[i];
}
}
}
int js2(int a){
for(int i=19;~i;i--){
if((a&(1<<i))>0){
return a^o[i];
}
}
}
主函数代码(自定义函数用 jsx(xxx) 代替了)。
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int tt;
cin>>tt;
c[tt]++;
}
for(int i=1;i<n;i++){
if(!c[i]){js1(i);}
}
int x;
for(int i=19;~i;i--){
if((1<<i)<=n){
x=i;break;
}
}
for(int i=0;i<x;i++){
if(!p[i]){
cout<<"-1";
return 0;
}
}
for(int i=1;i<n;i++){
cout<<i<<" "<<js2(i)<<endl;
}
return 0;
}