专栏文章
题解:CF288C Polo the Penguin and XOR operation
CF288C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio3umop
- 此快照首次捕获于
- 2025/12/02 12:55 3 个月前
- 此快照最后确认于
- 2025/12/02 12:55 3 个月前
思路:
有点小暴力,从大到小循环每个数 ,求出他和 到 中的数的最大异或结果。再加上异或结果,把两个数打上标记就可以了。
代码:
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int x[1000005];
main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=0; i<=n; i++) x[i]=-1;
int ans=0;
int lft=n+1;//剩余几个节点
for(int i=n; i>=0; i--) {
if(x[i]!=-1) continue;
if((n+1)%2==1&&lft==1){
x[i]=i;
// cout<<i<<' '<<x[i]<<'\n';
break;
}
int sl=log2(i)+1;
int j=i^(int)(pow(2,sl)-1);
ans+=(i^j)*2;
x[j]=i;
x[i]=j;
// cout<<i<<' '<<j<<'\n';
lft-=2;
// cout<<i<<' '<<lft<<'\n';
}
cout<<ans<<'\n';
for(int i=0;i<=n;i++) cout<<x[i]<<' ';
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...