社区讨论
GDOI T2 求证明 or 证伪
学术版参与者 4已保存回复 8
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 8 条
- 当前快照
- 1 份
- 快照标识符
- @lo90i8fb
- 此快照首次捕获于
- 2023/10/28 03:34 2 年前
- 此快照最后确认于
- 2023/10/28 03:34 2 年前
大致思路:做前缀异或和,记录 为上一个区间异或 的下标,如果遇到前缀异或和为 就将 删去,遇到相同的数字就 删去,最终答案为 删去区间长度;
感觉很危/jk,但是手玩了几个小数据没问题(
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans,lst=1;
int now=0;
int a[100009];
map<int,int> mp;
signed main(){
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
cin>>n;
a[1]=0;
for(int i=2;i<=n+1;i++) cin>>a[i];
mp[0]=1;
for(int i=2;i<=n+1;i++){
now=now^a[i];
if(now==0){
ans+=(i-lst);
lst=i;
}
if(mp[now]>0){
if(lst<=mp[now]){
ans+=(i-mp[now]);
lst=i;
}
}
mp[now]=i;
}
if(ans==n) cout<<"-1"<<endl;
else cout<<n-ans<<endl;
return 0;
}
/*
5
8 3 5 7 1
4
5 5 7 2
10
1 3 5 7 2 4 6 8 10 9
*/
回复
共 8 条回复,欢迎继续交流。
正在加载回复...