Codeforces Round #843 (Div. 2) C【思维】
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;
}
Codeforces Round #843 (Div. 2) C【思维】的更多相关文章
- 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】
https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...
- Codeforces Round #143 (Div. 2) (ABCD 思维场)
题目连链接:http://codeforces.com/contest/231 A. Team time limit per test:2 seconds memory limit per test: ...
- Codeforces Round #395 (Div. 2)(A.思维,B,水)
A. Taymyr is calling you time limit per test:1 second memory limit per test:256 megabytes input:stan ...
- Codeforces Round #416 (Div. 2)(A,思维题,暴力,B,思维题,暴力)
A. Vladik and Courtesy time limit per test:2 seconds memory limit per test:256 megabytes input:stand ...
- Codeforces Round #533 (Div. 2) C.思维dp D. 多源BFS
题目链接:https://codeforces.com/contest/1105 C. Ayoub and Lost Array 题目大意:一个长度为n的数组,数组的元素都在[L,R]之间,并且数组全 ...
- Codeforces Round #539 (Div. 2) D 思维
https://codeforces.com/contest/1113/problem/D 题意 将一个回文串切成一段一段,重新拼接,组成一个新的回文串,问最少切几刀 题解 首先无论奇偶串,最多只会切 ...
- Codeforces Round #542(Div. 2) CDE 思维场
C https://codeforces.com/contest/1130/problem/C 题意 给你一个\(n*m\)(n,m<=50)的矩阵,每个格子代表海或者陆地,给出在陆地上的起点终 ...
- Codeforces Round #304 (Div. 2) D 思维/数学/质因子/打表/前缀和/记忆化
D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #619 (Div. 2)E思维+二维RMQ
题:https://codeforces.com/contest/1301/problem/E 题意:给个n*m的图形,q个询问,每次询问问询问区间最大的合法logo的面积是多少 分析:由于logo是 ...
- Codeforces Round #700 (Div. 2) --- B(思维)
传送门 有必要提醒自己一下, 先把题读利索了(手动捂脸) 题目 B. The Great Hero The great hero guards the country where Homer li ...
随机推荐
- Vulhub 漏洞学习之:DNS
Vulhub 漏洞学习之:DNS 1 DNS域传送漏洞 DNS协议支持使用axfr类型的记录进行区域传送,用来解决主从同步的问题.如果管理员在配置DNS服务器的时候没有限制允许获取记录的来源,将会导致 ...
- MySQL索引相关知识学习心得
你知道的越多,你不知道的也就越多 -- 芝诺曾 一.MySQL索引学习 MySQl主要有两种类型的索引:哈希索引.B+树索引 1.哈希索引 哈希索引可以以O(1)的时间复杂度进行查找,但是这样查找导致 ...
- 计算机存储内部数据的原理,编程语言的发展史和分类,python解释器的下载和安装,计算机cmd窗口的使用,环境变量和解释器多版本共存方法
计算机内部存储数据的原理 计算机内部只认识01二进制. 存储单位:0和1分别代表一个比特位(bit).8bit=1bytes(字节) 1024kb=1MB 1024MB=1GB 1024GB=1TB ...
- windows自带xbox game bar如何更改录制视频保存位置
若要更改保存游戏剪辑的位置,请使用文件资源管理器根据需要将"捕获"文件夹移动到电脑上的任意位置. Windows 会将游戏剪辑和屏幕截图保存在该文件夹中(无论移动到哪里). ...
- goland 无法跳转 struct等
goland 提示: Cannot find declaration to go to 表现为:无法跳转,标红 但实际上对应文件是存在该struct或var 解决办法: ref:https://sta ...
- windows与linux下的路径区别
windows与linux下的路径区别windows用的是"\",linux用的是"/"这一点要特别清楚,, ps:在PHP windows也可以用/表示路径 ...
- vue 3.0 总线程bus引入(mitt)
vue 3.0 移除了 $on,$off 和 $once 方法,$emit 仍然是现有 API 的一部分,因为它用于触发由父组件以声明方式附加的事件处理程序. 官方推荐使用第三方类库. mitt举例 ...
- c# message (转)
一.消息概述 Windows下应用程序的执行是通过消息驱动的.消息是整个应用程序的工作引擎,我们需要理解掌握我们使用的编程语言是如何封装消息的原理. 什么是消息(Message) 消息就是通知和命令. ...
- 注意注意!!!!关于keil的问题,调试时候的bug
1.keil变量不区分大小写: 2.KEIL调试debug时误报,未定义某变量 但是实际定义了的. 今天用keil写代码 感觉逻辑上没问题 但是始终不是那个效果 检查了半天错误问题.最后debug居然 ...
- 执行 dataX 数据同步命令
:: 执行 dataX 数据同步命令 @echo off set day_interval=7@echo =========开始执行dataX数据同步========= @echo 时间周期为最近%d ...