[CF1748D] ConstructOR
题目描述
You are given three integers $ a $ , $ b $ , and $ d $ . Your task is to find any integer $ x $ which satisfies all of the following conditions, or determine that no such integers exist:
- $ 0 \le x \lt 2^{60} $ ;
- $ a|x $ is divisible by $ d $ ;
- $ b|x $ is divisible by $ d $ .
输入格式
Each test contains multiple test cases. The first line of input contains one integer $ t $ ( $ 1 \le t \le 10^4 $ ) — the number of test cases.
Each test case consists of one line, containing three integers $ a $ , $ b $ , and $ d $ ( $ 1 \le a,b,d \lt 2^{30} $ ).
输出格式
For each test case print one integer. If there exists an integer $ x $ which satisfies all of the conditions from the statement, print $ x $ . Otherwise, print $ -1 $ .
If there are multiple solutions, you may print any of them.
样例 #1
样例输入 #1
8
12 39 5
6 8 14
100 200 200
3 4 6
2 2 2
18 27 3
420 666 69
987654321 123456789 999999999
样例输出 #1
18
14
-1
-1
0
11
25599
184470016815529983
提示
In the first test case, $ x=18 $ is one of the possible solutions, since $ 39|18=55 $ and $ 12|18=30 $ , both of which are multiples of $ d=5 $ .
In the second test case, $ x=14 $ is one of the possible solutions, since $ 8|14=6|14=14 $ , which is a multiple of $ d=14 $ .
In the third and fourth test cases, we can show that there are no solutions.
注意,后面的 \(|\) 都是代表按位或,而不是整除。
要让 \(a|x\) 是 \(d\) 的倍数,让 \(b|x\) 是 \(b\) 的倍数。要同时让两个数满足不好写,所以尝试让 \(a|x=b|x=x\),并让 \(x\) 位 \(d\) 的倍数。
为什么敢于放到这一步呢?其实发现 \(x\) 的取值范围很大,所以极有可能达到这个条件。要满足上面这个条件,不妨让 \(x\) 的后 30 位就是 \(a|b\) 就行了
换句话说,\(x\equiv a|b\pmod{2^{30}}\)
如果把 \(x\) 表示为 \(dk\),那么就是 \(dk\equiv a|b\pmod{2^{30}}\),拿个exgcd 就好了。exgcd 的解是肯定符合要求的,同时如果 exgcd 无解,肯定原来也无解。
但是有一个更简单的方法。
原方程有解的条件是 \(\gcd(d,2^{30})\) 能整除 \(a|b\),而 \(\gcd(d,2^{30})\) 就是 \(\mathrm{lowbit(d)}\),那么可以通过不断除以 2 来判断。最后如果有解的时候,\(d\) 的最后一位已经被除成 1 了。现在假设答案 \(ans\) 满足了前 \(j-1\) 位与 \(a|b\) 相等,但是第 \(j\) 位与 \(a|b\) 不等,那么可以让 \(ans\) 加上 \(d\times 2^j\)。那么此时答案的这一位会发生变化,然后一直弄到 \(a|b\) 已经全部被模仿出来。
由于 \(a|b<2^{30}\),解合法。
#include<bits/stdc++.h>
using namespace std;
int a,b,d,t,p,cnt;
long long ret;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&a,&b,&d);
a|=b,p=1<<30,ret=cnt=0;
while(!(d&1)&&!(a&1))
a>>=1,d>>=1,p>>=1,++cnt;
if(!(d&1))
{
printf("-1\n");
continue;
}
// printf("%d %d %d\n",a,d,p);
for(int i=0;(1LL<<i)<=p&&(1LL<<i)<=a;i++)
{
if((ret>>i&1)!=(a>>i&1))
ret+=(1LL*d)<<i;
// printf("%d\n",ret);
}
printf("%lld\n",ret*(1LL<<cnt));
}
}
[CF1748D] ConstructOR的更多相关文章
- No-args constructor for class X does not exist. Register an InstanceCreator with Gson for this type to fix this problem.
Gson解析JSON字符串时出现了下面的错误: No-args constructor for class X does not exist. Register an InstanceCreator ...
- 分析js中的constructor 和prototype
在javascript的使用过程中,constructor 和prototype这两个概念是相当重要的,深入的理解这两个概念对理解js的一些核心概念非常的重要. 我们在定义函数的时候,函数定义的时候函 ...
- js中的constructor
定义和用法 constructor 属性返回对创建此对象的 Date 函数的引用. 语法 object.constructor constructor属性不影响任何JavaScript的内部属性.in ...
- Java程序设计之Constructor
插入段代码,下次回忆吧. 先新建一个Person类,代码如下: public class Person { private String name ; private int age; public ...
- prototype,__proto__,constructor
proto属性: 所有对象都有此属性.但它不是规范里定义的属性,并不是所有JavaScript运行环境都支持.它指向对象的原型,也就是你说的继承链里的原型.通过Object.getPrototypeO ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- 一张图理解prototype、proto和constructor的三角关系
× 目录 [1]图示 [2]概念 [3]说明[4]总结 前面的话 javascript里的关系又多又乱.作用域链是一种单向的链式关系,还算简单清晰:this机制的调用关系,稍微有些复杂:而关于原型,则 ...
- JavaScript中typeof、toString、instanceof、constructor与in
JavaScript 是一种弱类型或者说动态语言.这意味着你不用提前声明变量的类型,在程序运行过程中,类型会被自动确定. 这也意味着你可以使用同一个变量保存不同类型的数据. 最新的 ECMAScrip ...
- js中constructor和prototype
在最开始学习js的时候,我们在讲到原型链和构造函数的时候经常会有一个例子 如果我们定义函数如下: function Foo() { /* .. */ } Foo.prototype.bar = fun ...
- javascript中的prototype和constructor
构造函数 我们知道,ECMAScript5中的Object.Array.Date.RegExp.Function等引用类型都是基于构造函数的,他们本身就是ECMAScript5原生的构造函数.比如,我 ...
随机推荐
- MediaBox助力企业一站式获取音视频能力
以一只音视频百宝箱,应对「千行千面」. 洪炳峰.楚佩斯|作者 大家好,今天我分享的主题是MediaBox--行业音视频数字化再加速. 根据权威数据表明,65%的行业数字化信息来自视频,基于此,音视频技 ...
- utils工具类整理
闲暇之余,整理出了项目中常用的一些工具类,不是很全,后续会持续更新--- 全部代码请移植github哦-github地址:https://github.com/yang302/utils
- numpy 中的nan和常用的统计方法
- SpringBoot WebSocket STOMP
SpringBoot WebSocket STOMP 关键词:Springboot, WebSocket, STOMP, broadcast, sendToUser, MessageMapping, ...
- 5 分钟理解 Next.js SSG (Static Site Generation / Static Export)
5 分钟理解 Next.js SSG (Static Site Generation / Static Export) 在本篇文章中,我们将介绍 Next.js 中的 SSG(静态网站生成)功能,以及 ...
- IO流知识汇总(不断更新)
BIO.NIO.AIO有什么区别? BIO.NIO.AIO是Java中用于处理IO的三种不同的方式,它们之间的区别如下: BIO(Blocking IO):同步阻塞IO,传统的IO模型,也称为传统IO ...
- 多数据源管理:掌握@DS注解的威力
大家在日常后端开发过程,不可避免的会接触到需要用到配置多个数据源的场景,在这里,小编介绍一种简单方便的,只需要简单的配置和一个@DS注解就能实现动态数据源的方式,这种动态数据源底层原理是基于Mybat ...
- Newstar CTF 2023
WEEK1 PWN 1.ezshellcode 直接sendline(shellcode)即可 exp: from pwn import * p = remote("node4.buuoj. ...
- 怎么用Python写一个浏览器集群框架
这是做什么用的 框架用途 在采集大量新闻网站时,不可避免的遇到动态加载的网站,这给配模版的人增加了很大难度.本来配静态网站只需要两个技能点:xpath和正则,如果是动态网站的还得抓包,遇到加密的还得j ...
- CSP 2022 游寄
Day -2147483648 官网有了通知,但选手注册不知为何坏掉了: 先开坑: Day -大概两个月 注册了,但老师还没给我审核呜呜呜 第一轮 早上 早上起床就直接来机房了,不用跑操欸嘿. 上午 ...