https://codeforces.com/contest/1775/problem/C

题意

题意是说,给你n和x,你要求出最小的满足要求的m,使得 \(n\)&\((n+1)\)&\((n+2)\)&\(...\)&\(m=x\)

若没有满足的输出-1

思路

容易知道x的范围\(0\leq x \leq n\)

若\(x\)为0,答案是 \((1 << n的最高位的bit + 1)\)

若\(x\)为n,答案就是n

否则,先将\(x\)转化成二进制,\(x\)中至少有一个1,对于一个bit来说 n 0 x 1是不可能发生的,这一位x是1 只可能n取1,这个时候恰好满足“\(x\)最右边的1及之前的部分和\(n\)中对应的部分相同”,若这个条件不满足,输出-1

再来考虑这个位置之后的序列,x中的数肯定都是0了,假设n这一段数中,最高位上的数是1,此时x对应位上的数是0,可以知道此时肯定发生了进位,但是n和x的前缀又是完全相同的,故这种情况也不合法,输出-1

那么在这一段数中,\(n\)中就算有1,也不是紧邻着\(x\)中最右边的\(1\)的,我们只需要找到\(n\)中最低位的\(1\),设这个位置为\(i\),答案就是 \(((n >> i + 1) | 1) << i + 1\)

code

#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
const int N = 2e5 + 10, mod = 1e9 + 7;
int T;
ll n, x; int main() {
cin >> T;
while(T--) {
cin >> n >> x;
if(x > n) {
puts("-1");
continue;
}
if(x == n) {
printf("%lld\n", n);
continue;
}
if(x == 0) {
for(int i = 60; i >= 0; i--) {
if(n >> i & 1) {
printf("%lld\n", (1LL << (i + 1)));
break;
}
}
continue;
}
int pos = -1;
for(int i = 0; i <= 60; i++) {
if(x >> i & 1) {
pos = i;
break;
}
}
// [st...pos] , [pos + 1, ... , en]
bool f = 1;
for(int i = 60; i >= pos; i--) {
if((x >> i & 1) != (n >> i & 1)) {
f = 0;
break;
}
}
if(pos && (n >> (pos - 1) & 1)) f = 0;
if(!f) {
puts("-1");
continue;
}
ll ans = 0;
for(int i = pos - 1; i >= 0; i--) {
if(n >> i & 1) {
ans = ((n >> i + 1) | 1) << i + 1;
break;
}
}
printf("%lld\n", ans);
}
return 0;
}

最新文章

  1. 一个spring jdbc实例
  2. SQL Server 2008 R2 开启允许远程连接
  3. android 如何设置背景的透明度
  4. app控件获取之uiautomatorviewer
  5. C++ for循环效率
  6. Visual Studio2012中搭建WCF项目
  7. (求租仓库)navigationController .navigationBar 的属性设置
  8. 使用spring利用HandlerExceptionResolver实现全局异常捕获
  9. Django自定义过滤器及标签
  10. [Golang] 开源一个帧同步服务器
  11. 高级数据类型--字典(dict)
  12. 20172306《Java程序设计与数据结构》第一周总结
  13. 使用Scratch进行少儿编程
  14. pandas.read_csv用法(转)
  15. tomcat介绍
  16. 每日英语:Why Are Items Pricier in China?
  17. java.net.UnknownHostException异常处理
  18. JBOSS invoker GETSHELL(PHP版)
  19. poj 1419Graph Coloring 【dfs+补图+计算最大团+计算最大独立集 【模板】】
  20. 关于hibernate配置步骤

热门文章

  1. JSP 与 Servlet 之间的联系,及其语法
  2. 基于C++的OpenGL 01 之Hello Triangle
  3. API 小白入门教程
  4. ABP微服务系列学习-对接前端界面
  5. js提交数据
  6. nginx 安全漏洞(CVE-2021-23017) 版本升级
  7. [Unity]关于Unity中的触摸类Input.Touch以及简单的虚拟摇杆实现
  8. FMC子卡设计资料原理图:FMC177-基于AD9361的双收双发射频FMC子卡
  9. pycharm界面背景色设置
  10. 【面试题】ES6语法五之箭头函数