题意

输入一个正整数 \(T(1 \leq T \leq 2000)\),代表 \(T\) 组测试用例。对于每个测试用例:

输入两个整数 \(n, m(0 \leq n, m \leq 10^{18})\),问:能否找到一个数 \(n + x\) 使得 \(n\) & \((n + 1)\) & ... & \((n + x) == m\) 成立?若能,输出最小的 \(n + x\),否则输出 \(-1\)。

题解

对于 \(n \lt m\) 的情况,由于与运算只会使结果单调不增,因此 \(n \lt m\) 的情况必定无法找到合适的解。

对于 \(n == m\) 的情况,明显直接输出 \(n\) 即可。

对于 \(m \lt n\) 的情况,首先必须保证 \(n\) & \(m == m\),否则必定无法找到合适的解。比如:\(6_{10}(1100_2)\) 和 \(2_{10}(0010_2)\),由于 \(6_{10}\) 的第 \(2\) 位bit是 \(0\),那么这一个bit位进行与运算的结果必定为 \(0\),必不成立。对于 \(n\) & \(m = m\) 成立的情况,可对 \(m == 0\) 是否成立进行讨论:

  • \(m == 0\) 成立,只需要找到一个能使 \(n\) 在二进制形式下全部位数都置为 \(0\) 的数即可,明显最小的符合要求的数就是 \(n\) 在二进制形式下最高位的 \(1\) 再左移一位的结果。比如:\(13_{10}(01101_2)\) & \(16_{10}(10000_2) == 0\)。
  • \(m == 0\) 不成立,假设当前的值为 \(n\),那么必须先与 \(n + 1\) 进行与运算,那么可得知的是二进制形式下必定是低位先被置为 \(0\),并且在进行位运算的时候,不可以使得 \(n\) & \(m == m\) 不再成立。所以只需要先算出 \(m\) 的最低位的 \(1\) 的位置 \(lb\),再判断出当 \(lb > 1\) 时 \(n\) 的 \(lb - 1\) 位是否为 \(1\) 即可,若是必定无解,否则答案就是 \(n\) 再异或上第一段从 \(lb - 1\) 起至最低位连续的 \(1\)的结果。

参考代码

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
using namespace std; typedef long long ll;
ll ans, n, m;
int T = 1; void solve() {
cin >> n >> m;
if (n < m || n & m != m) ans = -1;
else if (n == m) ans = n;
else {
int t = __builtin_ffsll(m);
if (!m) {
for (int i = 61; i >= 0; -- i) {
if (n >> i & 1) {
ans = 1LL << (i + 1);
break;
}
}
} else if (n >> t != m >> t || t > 1 && n >> t - 2 & 1) ans = -1;
else {
for (int i = t - 3; i >= 0; -- i) {
if (n >> i & 1) {
ans = 1LL << i + 1 | n >> t - 1 << t - 1;
while (i >= 0 && n >> i & 1) {
ans &= ~(1LL << i);
-- i;
}
break;
}
}
}
}
cout << ans << '\n';
} int main() {
IOS
cin >> T;
while (T --) solve();
return 0;
}

【位运算】codeforces 1775 C. Interesting Sequence的更多相关文章

  1. 图论/位运算 Codeforces Round #285 (Div. 2) C. Misha and Forest

    题目传送门 /* 题意:给出无向无环图,每一个点的度数和相邻点的异或和(a^b^c^....) 图论/位运算:其实这题很简单.类似拓扑排序,先把度数为1的先入对,每一次少一个度数 关键在于更新异或和, ...

  2. [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算

    [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算 题目大意: 一个长度为\(n(n\le10^6)\)的序列\(A\).\(m(m\le10^6)\)次 ...

  3. Codeforces 868D Huge Strings - 位运算 - 暴力

    You are given n strings s1, s2, ..., sn consisting of characters 0 and 1. m operations are performed ...

  4. Codeforces Round #443 (Div. 2) C 位运算

    C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  5. Codeforces Round #716 (Div. 2), problem: (B) AND 0, Sum Big位运算思维

    & -- 位运算之一,有0则0 原题链接 Problem - 1514B - Codeforces 题目 Example input 2 2 2 100000 20 output 4 2267 ...

  6. Divide by Zero 2021 and Codeforces Round #714 (Div. 2) B. AND Sequences思维,位运算 难度1400

    题目链接: Problem - B - Codeforces 题目 Example input 4 3 1 1 1 5 1 2 3 4 5 5 0 2 0 3 0 4 1 3 5 1 output 6 ...

  7. CodeForces 282C(位运算)

    C. XOR and OR time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  8. Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] A. Raising Bacteria【位运算/二进制拆分/细胞繁殖,每天倍增】

    A. Raising Bacteria time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. Codeforces 620E New Year Tree(线段树+位运算)

    题目链接 New Year Tree 考虑到$ck <= 60$,那么用位运算统计颜色种数 对于每个点,重新标号并算出他对应的进和出的时间,然后区间更新+查询. 用线段树来维护. #includ ...

  10. Codeforces Round #443 (Div. 2) C: Short Program - 位运算

    传送门 题目大意: 输入给出一串位运算,输出一个步数小于等于5的方案,正确即可,不唯一. 题目分析: 英文题的理解真的是各种误差,从头到尾都以为解是唯一的. 根据位运算的性质可以知道: 一连串的位运算 ...

随机推荐

  1. C++11新初始化方法 使用{}初始化变量

    列表初始化 在C++11及以后的版本中,使用{}来初始化变量是一种新的初始化方法,称为列表初始化(List Initialization).这种初始化方法可以用来初始化内置类型.自定义类型以及聚合类型 ...

  2. LNMP 和 LAMP 对比 (仅供参考)

    Nginx 性能稳定.功能丰富.运维简单.处理静态文件速度快且消耗系统资源极少. Apache 是 LAMP 架构最核心的 Web Server,开源.稳定.模块丰富是 Apache 的优势.但 Ap ...

  3. 【赵渝强老师】管理Docker镜像

    一.什么是Docker的镜像 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙 ...

  4. CentOS 7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.2

    CentOS 7.9安装ElasticSearch7.14.0.ElasticSearch-Head.Kibana.Node14.18.2   1.安装文件 1. elasticsearch-7.14 ...

  5. Python技术书示例代码相关内容

    二维码用微信扫,按提示填写你的邮箱,转到电脑上打开邮箱下载.清华国企网盘,比较快速.安全.放心下载. 百度网盘链接 用Edge/Chrome浏览器下载. <Python自动化运维快速入门> ...

  6. Blazor开发框架Known-V2.0.13

    大家好,国庆节快乐,Known又更新了一波功能. 继上个版本以来,一直在完善网站文档.KnownCMS开源项目和解决框架客户提出的一些问题.这期间客户反馈的问题主要如下: 微信模板消息收不到,查其原因 ...

  7. 会话层技术-cookie

    会话层技术cookie的使用 cookie拿下! package com.atguigu.servlet; import javax.servlet.ServletException; import ...

  8. hasOwnProperty()方法

    hasOwnProperty()方法可以检测对象是否有某个属性 var man = { legs:2, hands:2, heads:1 } man.hasOwnProperty("head ...

  9. 体验国产系统Deepin:很爽

    最近开始把之前一直吃亏的旧电脑拿出来再利用了,先还是选择了熟悉的ubuntu系列.安装了Ubuntu 22.04之后,风风火火地把需要的开发环境搭建起来,虽然桌面有些卡顿,但瑕不掩瑜玉.趁着热情又想着 ...

  10. SLS:整层剪掉!基于降维特征聚类的PETL模型剪枝新方法 | ECCV'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Straightforward Layer-wise Pruning for More Efficient Visual Adaptation ...