1.练习项目 :
问题描述
卓儿有一个包含 n 个整数的数组,她想找到子数组中的最大异或和。
输入格式
第一行是一个整数 n,表示数组的大小。
接下来一行有 n 个整数 x1,x2,...,xn,表示数组的内容。
输出格式
输出一个整数,表示子数组中的最大异或和。
2.选择课程
在蓝桥云课中选择题库,选择题号17205并开始练习。
3.开始练习
(1)源码 :
#include<bits/stdc++.h>
using namespace std;
const int N=32*1e5+10,M=1e5+10;
int aM,prefixM;
int sonN2,tot=1;
void insert(int x)
{
int o=1;
for(int i=30;i>=0;i--){
int y=x>>i&1;
if(!sonoy)sonoy=++tot;
o=sonoy;
}
}
int query(int x)
{
int o=1,res=0;
for(int i=30;i>=0;i--){
int y=x>>i&1;
//若y==1则走0,若y==0则走1
if(sono!y)o=sono!y,res|=(1<<i);
else o=sonoy;
}
return res;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;cin>>n;
for(int i=1;i<=n;i++)cin>>ai;
for(int i=1;i<=n;i++)prefixi=prefixi-1^ai;
insert(0);
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,query(prefixi));
insert(prefixi);
}
cout<<ans<<'\n';
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法 是否切换 为英语模式;语法是否错误。