首页 > 其他分享 >abc238D 两数之和跟按位与

abc238D 两数之和跟按位与

时间:2024-03-07 23:44:34浏览次数:26  
标签:abc238D 非负 int long solve 按位 两数

给定非负整数a和s,问是否存在一组非负整数(x,y),满足x&y=a,并且x+y=s
数据范围:0<=a,s<2^60

思路:异或是不进位加法,如果考虑进位,加上按位与的结果左移1位即可,也就是:x+y=(x^y)+((x&y)<<1),代入得x^y=s-2a,并且x&y=a,逐位分析可知,按位与的结果为1时,异或结果必为0。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
#define per(i,a,b) for(int i=b; i>=a; i--)

void solve() {
    int a, s;
    cin >> a >> s;
    if (s < 2 * a) {
        cout << "No\n";
        return;
    }
    s -= 2 * a;
    if ((s & a) != 0) {
        cout << "No\n";
        return;;
    }
    cout << "Yes\n";
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int t = 1; cin >> t;
    while (t--) solve();
    return 0;
}

标签:abc238D,非负,int,long,solve,按位,两数
From: https://www.cnblogs.com/chenfy27/p/18060063

相关文章

  • LeetCodeHot100 1.两数之和 46.字母异位词分组 128.最长连续序列
    1.两数之和https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-100-likedpublicint[]twoSum(int[]nums,inttarget){HashMap<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.l......
  • st表二分按位与_cf900_E. Iva & Pav
    目录题目概述思路想法参考代码做题反思题目概述原题参考:E.Iva&Pav给出长度为n的数组和m次询问,每次询问包括一个左区间l和一个整数k,要求给出最大的右区间的值使得al&al+1&...&ar>=k思路想法其实对二进制的几种运算随意看一下,可以发现:随着长度的增加,按位与的结果是保......
  • 代码随想录 第六天 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交
    LeetCode:242.有效的字母异位词-力扣(LeetCode)思路:既然只判断两个字符串的字母,就一个++,一个--,最后如果二十六个字母都是零,说明两个字符串相等。反思: //charat(i)是返回字符串索引,所以s.charAt(i)-'a'实际上是获取字符串s中第i个字符相对于字母'a'的偏移量。......
  • 两数之和-输出有序数组
    167TwoSumII-Inputarrayissorted问题描述:给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值index1和index2,其中index1必须小于index2。说明:返回的下标值(index1和index2)不是从零开始的。你可以假设每个输入......
  • 双重按位非运算符 ~~ 对数字取整
    介绍按位非运算符(~)将操作数的位反转。它将操作数转化为32位的有符号整型。也就是可以对数字进行取整操作(保留整数部分,舍弃小数部分)。~-2//1~-2.222//1并且按位非运算时,任何数字 x(已被转化为32位有符号整型) 的运算结果都是 -(x+1)。那么双重按位非(~~)对数字的运......
  • 代码随想录算法训练营第六天 |242. 有效的字母异位词 349. 两个数组的交集 202. 快乐
    1.两数之和 已解答简单 相关标签相关企业 提示 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同......
  • 167. 两数之和 II - 输入有序数组(中)
    目录题目题解:双指针题目给你一个下标从1开始的整数数组numbers,该数组已按非递减顺序排列,请你从数组中找出满足相加之和等于目标数target的两个数。如果设这两个数分别是numbers[index1]和numbers[index2],则1<=index1<index2<=numbers.length。以长度......
  • 实现对象转成字节数组(整型支持按位写入,字符串则按字节写入)
    闲着无聊,写了一个对象转换成byte[]的工具类,支持整型按位写入(大大节省空间),具体步骤如下:1.定义实体类和注解publicclassUser{/***ID,4个字节,32bit*/@JSONField(ordinal=1)@BitPos(offset=0,size=32)publicintid;/***......
  • 吴师兄学算法day07 167. 两数之和 II - 输入有序数组
    题目:167. 两数之和II-输入有序数组易错点:下标为1开始我的代码:classSolution:deftwoSum(self,numbers:List[int],target:int)->List[int]:right=len(numbers)-1left=0whileleft<right:ans=numbers[left]......
  • 两数之和【哈希】
    Problem:1.两数之和文章目录思路解题方法复杂度Code思路n方可以暴力,也可以用hash去降低时间复杂度。解题方法遍历列表,每个数都看一下是否它的补是否再hash表里面,在就说明找到了,不在就把它放进去,然后继续遍历。复杂度时间复杂度:添加时间复杂度,示例:空间复杂度:添加空间复杂度......