「AGC035C」 Skolem XOR Tree

感觉有那么一点点上道了?

首先对于一个 \(n\),若 \(n\equiv 3 \pmod 4\),我们很快能够构造出一个合法解如 \(n,n-1,n-2,..,1,n+n,n+n-1,n+n-2,...,n+1\)。

若 \(n\equiv 1 \pmod 4\),我们将 \(n,n-1\) 拆分出来单独成一条链。

然后如果 \(n\) 是偶数,可以想到对于这个 \(n\) 单独处理,则剩下的问题转化为我们上面的问题。

考虑对于这个偶数特殊判断,可以想到两个偶数之间的数的异或和应该等于这个偶数,所以若 \(\operatorname{lowbit}(n)=n\) 则无解,因为中间的数都比 \(n\) 小,且二进制下这一位均为 \(0\),不可能异或出 \(n\)。

所以根据这一点对于偶数有非常方便的构造方式:\(n\rightarrow n-\operatorname{lowbit}(n) \rightarrow \operatorname{lowbit}(n)\rightarrow n\)。

似乎根据这个性质再对 \(2\) 的次幂特判就已经做完了

然后这个题就做完了。

/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int a[maxn];
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n;cin>>n;
if((n&-n)==n) cout<<"No\n",exit(0);
cout<<"Yes\n";
int tmp=n-(n%2==0);
if(tmp%4==1){
cout<<tmp<<' '<<tmp-1<<'\n';
cout<<tmp-1<<' '<<1<<'\n';
cout<<1<<' '<<tmp+n<<'\n';
cout<<tmp+n<<' '<<tmp+n-1<<'\n';
tmp-=2;
}
for(int i=1;i<=tmp;++i) a[i]=tmp-i+1,a[i+tmp]=n+tmp-i+1;
if(n!=tmp&&n%2==0){
for(int i=1;i<2*tmp;++i) cout<<a[i]<<' '<<a[i+1]<<'\n';
cout<<n+(n&-n)+1<<' '<<n<<'\n';
cout<<n-(n&-n)<<' '<<n*2<<'\n';
}
else{
for(int i=1;i<2*tmp;++i) cout<<a[i]<<' '<<a[i+1]<<'\n';
}
return 0;
}

最新文章

  1. 最难面试的IT公司之ThoughtWorks代码挑战——FizzBuzzWhizz游戏
  2. 进程间通信方式与Binder机制原理
  3. NYOJ题目816它合法吗?
  4. 2012 #5 Gold miner
  5. MQTT之 Mosquitto hello world的使用
  6. Android tab_Host页面跳转,传值,刷新等问题汇总
  7. Oracle转移user表空间位置
  8. 寻找所有javaee官方文档的方法
  9. Oracle SQL篇(三)Oracle ROWNUM 与TOP N分析
  10. matlab矩阵的表示和简单操作
  11. box-shadow IE8兼容处理
  12. js登录,回车登录
  13. FineUI 相关
  14. layer.open参数;layer.open关闭事件;layer.open关闭刷新;layer.open获取子页的值;layer.open调用子页面的方法
  15. 你可能没听过的11个Python库
  16. WPFのImage控件souce引入的方法总结
  17. BugPhobia终章篇章:学霸在线系统Beta阶段展示
  18. nginx负载均衡二:配置
  19. PHP学习路径及练手项目合集
  20. MVC模式、加密、jsonwebtoken

热门文章

  1. Steam游戏《Northgard(北境之地)》修改器制作
  2. OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
  3. 自动调试用于移动GPU的卷积网络
  4. 使用Vue写一个九九乘法表
  5. 【八】Kubernetes 五种资源控制器详细介绍以及功能演示
  6. springboot异常错误处理
  7. 导出 Excel 模板自动生成规则,避免用户来回修改
  8. MySQL零散知识点(02)
  9. oracle 11g查看alert日志方法
  10. open数据库报错ERROR at line 1: ORA-03113: end-of-file on communication channel Process ID: 3880 Session ID: 125 Serial number: 3