题目 题意: x & y = a x + y = s 判断是否存在非负整数x、y满足条件 思路: 首先考虑到两个数至少都是a,s >= 2 *a. 先假定x和y都是a,然后去凑s-2 * a剩余位置。如果剩余位置在a中出现过,那寄了,因为这一位用过。 s >= 2 * a and ( (s-2 *a) & a) == 0 或者特殊一点,x = a,y = s-a. x & y == a 时间复杂度: O(1) 代码:
// Problem: D - AND and SUM
// Contest: AtCoder - Monoxer Programming Contest 2022(AtCoder Beginner Contest 238)
// URL: https://atcoder.jp/contests/abc238/tasks/abc238_d
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define OldTomato ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr)
#define fir(i,a,b) for(int i=a;i= 2*a && ( ((s-2*a)&a) == 0) ) puts("Yes");
else puts("No");
// if(((s-a)&a) == a) puts("Yes");
// else puts("No");
}
signed main(void)
{
// T = 1;
// OldTomato; cin>>T;
read(T);
while(T--)
{
solve();
}
return 0;
}