#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,a[N],s1[N],s2[N],maxn=-INT_MAX,minn=INT_MAX;
signed main(){
freopen(“mistake.in”,“r”,stdin);
freopen(“mistake.out”,“w”,stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) s1[i]=s1[i-1]^a[i];
for(int i=n;i>=1;i–) s2[i]=s2[i+1]^a[i];
for(int i=1;i<=n;i++){
int res=(s1[i-1]+a[i])^s2[i+1];
if(maxn<res) maxn=res;
else if(minn>res) minn=res;
}
cout<<minn<<" "<<maxn;
return 0;
}
90分,不知道怎么回事
for
循环从 2 开始。
那行从2开始
for(int i=1;i<=n;i++){
int res=(s1[i-1]+a[i])^s2[i+1];
if(maxn<res) maxn=res;
else if(minn>res) minn=res;
}
改为
for(int i=2;i<=n;i++){
int res=(s1[i-1]+a[i])^s2[i+1];
if(maxn<res) maxn=res;
else if(minn>res) minn=res;
}
你发一下你的代码行吗
第二题不用不用两个数组,可以利用异或的自反律,即 a \oplus b \oplus a=b 。
核心代码:
maxx=max(maxx,(zs[i]+a[i+1])^(zs[n]^zs[i+1]));
minn=min(minn,(zs[i]+a[i+1])^(zs[n]^zs[i+1]));
循环要从 1 到 n-1 。
zs
代表前缀异或和(我瞎打的)。
你发一下你的代码行吗
第三题我不会(我太蒟蒻了)。
我说第二题
我们信友队的论坛里不让发 AC 代码 。
否则要被禁言。
你有洛谷号吗
这个人就是来骗吃骗喝骗代码
不是,我就第一道题AC了,这道题没想明白
核心代码:
for(long long i=1;i<n;i++){
maxx=max(maxx,(zs[i]+a[i+1])^(zs[n]^zs[i+1]));
minn=min(minn,(zs[i]+a[i+1])^(zs[n]^zs[i+1]));
}
我就这么改的不对
minn
要赋初值为INT_MAX
或1<<31
你WA在了第1个点