社区讨论
我们任然不知道对拍的真实作用
P5283[十二省联考 2019] 异或粽子参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lwojyh3s
- 此快照首次捕获于
- 2024/05/27 13:53 2 年前
- 此快照最后确认于
- 2024/05/27 18:11 2 年前
先和我的60分暴力程序对拍,拍了一个半小时(500000多次)没有拍出来,觉得可能是数据小了,又和第一篇题解对拍,还是没有拍出来,求大佬帮助。
思路同第一篇题解
CPP#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k,pre[500005],siz[10000005];
ll tri[10000005][2],pot,tot[500005];
inline void insert(ll x){
ll p=0;
for(ll i=32;i>=0;i--){
ll to=x>>i&1;
if(!tri[p][to])tri[p][to]=++pot;
p=tri[p][to];siz[p]++;
}
}
inline ll query(ll x,ll k){
ll p=0,res=0;
for(ll i=32;i>=0;i--){
ll to=x>>i&1;
if(!tri[p][to^1])p=tri[p][to];
else if(k<=siz[tri[p][to^1]]){p=tri[p][to^1];res+=1<<i;}
else{k-=siz[tri[p][to^1]];p=tri[p][to];}
}
return res;
}
priority_queue<pair<ll,ll>>que;
signed main(){
// freopen("code.in","r",stdin);
// freopen("code.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>k;k<<=1;
insert(0);
for(ll i=1;i<=n;i++){
cin>>pre[i];
pre[i]^=pre[i-1];
insert(pre[i]);
}
for(ll i=0;i<=n;i++){
que.push({query(pre[i],++tot[i]),i});
}
ll ans=0;
while(k--){
ans+=que.top().first;
ll p=que.top().second;
que.pop();
que.push({query(pre[p],++tot[p]),p});
}
cout<<ans/2;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...