数学-二进制

D - AND and SUM

题目链接
https://atcoder.jp/contests/abc238/tasks/abc238_d
题意
给你a和s,问是否存在x和y,使得x+y=s,x&y=a
解析

x+y=x&y+x|y

已知x&y=a, 所以x|y=sa, 而x|yx&y&(x&y)=0,
所以只需求出s2a,与a相与便可以判断这里sa是不是恰好是x|y.
Ac代码

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long ll;

ll a, s;
int t;

int main()
{
    scanf("%d", &t);
    while(t --)
    {
        scanf("%lld%lld", &a, &s);
        if(s - 2 * a >= 0 && ((s - 2 * a) & a) == 0) puts("Yes");
        else puts("No");
    }
    return 0;
}

posted @   小菜珠的成长之路  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示