【位运算】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的方案,正确即可,不唯一. 题目分析: 英文题的理解真的是各种误差,从头到尾都以为解是唯一的. 根据位运算的性质可以知道: 一连串的位运算 ...
随机推荐
- 离线安装Redis
redis 直接去官网下载tar包就可以 主要是gcc 环境的安装包不太好找,我下载的还缺少 make 如果服务器比较干净,还得预装一下lrzsz-0.12.20.tar.gz 上传下载文件,unzi ...
- Java项目笔记(一)
一.springboot控制台打印sql日志 ---------.mapper为你启动类扫描的mapper路径 logging.level.---------.mapper = debug 二.前端传 ...
- 逆向WeChat(七)
上篇介绍了如何通过嗅探MojoIPC抓包小程序的HTTPS数据. 本篇逆向微信客户端本地数据库相关事宜. 本篇在博客园地址https://www.cnblogs.com/bbqzsl/p/184235 ...
- CentOS开放端口的方法(转载)
CentOS开放端口的方法 转载:https://www.itfeichai.com/centos-open-porter/ Centos升级到7之后,内置的防火墙已经从iptables变成了fire ...
- Java日期时间API系列27-----Jdk8中java.time包中的新的日期时间API类,使用xk-time工具类创建日历应用,自定义节假日,工作日和打印日历表。
1.日历相关类 1.1 日历类 CalendarWrapper package com.xkzhangsan.time.calendar; import java.io.Serializable; i ...
- vagrant文件基础配置
Vagrant.configure("2") do |config| config.vm.box = "centos7" # box 名称 config.vm. ...
- apisix~kafka-logger插件
作用 将http请求与响应的内容发到kafka的topic,以json的形式发送存储 配置相关 log_format为自定义配置字段,添加后,默认的请求响应消息将被覆盖 { "_meta&q ...
- kotlin更多语言结构——>作用域函数
作用域函数 Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块.当对一个对象调用这样的函数 并提供一个 lambda 表达式时,它会形成一个临时作用域.在此作用域中,可以访问 ...
- 用自定义功能区完成Excel两种颜色的交错填充
今天需要用Excel中的填充颜色完成两种颜色的交错填充 在excel中,选择一个颜色填充后,再切换到另一个颜色,再点击填充.操作起来会显得比较笨重 于是萌生了一个想法,是否可以通过Excel的自定义功 ...
- Redis高可用-集群部署
redis配置 Redis集群需要至少3个主节点,为保证数据的完整性每个主节点至少需要一个从节点,所以至少需要准备6个Redis服务 建议将redis注册为系统服务并设置自启动,服务注册命令为: re ...