题意

输入一个正整数 \(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. skywalking/8.5部署

    制作镜像 OAP镜像 # cat oap/Dockerfile FROM apache/skywalking-oap-server:8.5.0-es7 # 时区修改为东八区 RUN apk add - ...

  2. 开源的键鼠共享工具「GitHub 热点速览」

    十一长假回来,我的手放在落灰的键盘上都有些陌生了,红轴竟敲出了青轴般的响声,仿佛在诉说对假期结束的不甘. 假期回归的首更,让我们看看又有什么好玩的开源项目冲上了开源热榜.一套键盘和鼠标控制多台电脑的工 ...

  3. vue3中没有 this 环境变量了

    因为 api setup 在 beforecreate 之前执行,所以 this 是 undefined : setup 不能是一个 async 函数 ,因为返回值不是 对象了 ,而是 promise ...

  4. 0602-nn.Module

    0602-nn.Module 目录 一.nn.Module 1.1 构建一层网络--全连接层 1.2 构建多层网络--多层感知机 pytorch完整教程目录:https://www.cnblogs.c ...

  5. Ex-BSGS

    给定\(a,p,b\),求\(a^x\equiv b \pmod p\)的最小自然数\(x\) . 保证\(\sum \sqrt p \leq5\times 10^6\) 当\(a=p=b=0\)时, ...

  6. day15-三大基本结构

    顺序结构 Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行. 顺序结构是最简单的算法结构. 语句和语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组 ...

  7. KubeSphere 社区双周报 | OpenFunction v0.8.0 发布 | 2022-12-09

    KubeSphere 从诞生的第一天起便秉持着开源.开放的理念,并且以社区的方式成长,如今 KubeSphere 已经成为全球最受欢迎的开源容器平台之一.这些都离不开社区小伙伴的共同努力,你们为 Ku ...

  8. 如何正确的使用CMDB?

    为什么说CMDB在企业中很难被使用起来?第一,CMDB的数据集成与准确性维护是一大挑战,因为需要确保来自多个异构IT系统的配置信息能够实时.准确地同步与更新.第二,复杂的IT环境和快速变化的业务需求使 ...

  9. spring boot shardingsphere 使用hikari连接池配置

    shardingsphere 使用hikari连接池配置: shardingsphere: datasource: names: ds ds: type: com.zaxxer.hikari.Hika ...

  10. jsp页面访问数据库根据数据情况,定时弹出提醒

    需求:根据数据库情况,在页面定时弹出相应的消息 实现: 1. 展示DIV设置 <script language="javascript" type="text/ja ...