【位运算】codeforces 1775 C. Interesting Sequence
题意
输入一个正整数 \(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的更多相关文章
- 图论/位运算 Codeforces Round #285 (Div. 2) C. Misha and Forest
题目传送门 /* 题意:给出无向无环图,每一个点的度数和相邻点的异或和(a^b^c^....) 图论/位运算:其实这题很简单.类似拓扑排序,先把度数为1的先入对,每一次少一个度数 关键在于更新异或和, ...
- [CF703D]Mishka and Interesting sum/[BZOJ5476]位运算
[CF703D]Mishka and Interesting sum/[BZOJ5476]位运算 题目大意: 一个长度为\(n(n\le10^6)\)的序列\(A\).\(m(m\le10^6)\)次 ...
- Codeforces 868D Huge Strings - 位运算 - 暴力
You are given n strings s1, s2, ..., sn consisting of characters 0 and 1. m operations are performed ...
- Codeforces Round #443 (Div. 2) C 位运算
C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 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 ...
- 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 ...
- CodeForces 282C(位运算)
C. XOR and OR time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 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 ...
- Codeforces 620E New Year Tree(线段树+位运算)
题目链接 New Year Tree 考虑到$ck <= 60$,那么用位运算统计颜色种数 对于每个点,重新标号并算出他对应的进和出的时间,然后区间更新+查询. 用线段树来维护. #includ ...
- Codeforces Round #443 (Div. 2) C: Short Program - 位运算
传送门 题目大意: 输入给出一串位运算,输出一个步数小于等于5的方案,正确即可,不唯一. 题目分析: 英文题的理解真的是各种误差,从头到尾都以为解是唯一的. 根据位运算的性质可以知道: 一连串的位运算 ...
随机推荐
- QT QML实用效果之实现页面切换效果
简介 本文介绍了如何使用QT QML和JavaScript实现页面动态加载和切换的效果. 文章目录 效果 JavaScript代码:butianyun.js文件 QML代码:主页面 页面A QML代码 ...
- [TK] 寻宝游戏
在树上标记若干个点,求出从某个点走过全部点并回到该点的最小路径. 有多次询问,每次询问只改变一个点. 首先是一个暴力的思路. 会发现,从标记点中的其中一个开始走,结果一定更优,并且无论从哪个点开始走, ...
- Java如何将Object转换成指定Class对象
在Java中,将Object转换为指定类型的Class对象实际上是两个不同概念的操作: 将Object实例转换为特定类型的实例:这通常涉及到类型转换(如(MyType) myObject)或者通过反射 ...
- 彻底解决 user.config 文件损坏
症状见 发生 Configuration system failed to initialize 错误的一个特例 解决的办法,在去读 user.settings 之前捕获错误,比如 Main() 里面 ...
- USB协议详解第10讲(USB描述符-报告描述符)
1.报告描述符的概念和作用 开门见山,报告描述符就是描述报告(HID接口上传输事务中的数据)的一组数据结构. 首先大家可能会问,报告又是什么?我们前面讲过,USB主机一般是以中断的方式向HID设备发送 ...
- Linux-USB驱动笔记-Gadget Function驱动
1.前言 在Linux-USB驱动笔记(四)–USB整体框架中有説到Gadget Function驱动,下面我们来具体看一下. Gadget Function就是指设备的功能,比如作为U盘,需要文件存 ...
- 【Azure Cloud Service】使用RESTAPI更新Cloud Service(Extended Support) 中所配置的证书
问题描述 当根据Cloud Service (Extended Support) 文档更新证书 ( https://docs.azure.cn/zh-cn/cloud-services-extende ...
- Kali Linux 各版本开启ssh 服务
Kali Linux 各版本开启ssh 服务 2019版kali Linux SSH链接办法 修改kali关于SSH服务默认配置并重启SSH服务,步骤如下: 打开sshd_config文件 leafp ...
- nicegui太香了,跨平台开发和跨平台运行--使用Python+nicegui实现系统布局界面的开发
在现今国产化浪潮的驱动下,跨平台或者缩小范围说基于国产化Linux或者基于国产鸿蒙系统的开发才是未来的趋势了,风口浪尖上,我们开发人员也只能顺势而为,本篇随笔介绍在Python开发中,使用使用Pyth ...
- 鲲鹏(ARM64)+麒麟(Kylin v10)离线部署 KubeSphere
作者:社区用户-天行1st 本文将详细介绍,如何基于鲲鹏 CPU(ARM64) 和操作系统 Kylin V10 SP2/SP3,利用 KubeKey 制作 KubeSphere 和 Kubernete ...