由U&V==V方有U到U+V的一条有向边知,U+V必定由U进位而来,且U+V的二进制中1的个数必然小于等于U;则可以很简单判断
/*
- @Author: your name
- @Date: 2021-03-08 20:21:54
- @LastEditTime: 2021-03-08 20:27:27
- @LastEditors: Please set LastEditors
- @Description: In User Settings Edit
- @FilePath: \code_formal\cf\GR_13_4.cpp
/
/ - @Author: your name
- @Date: 2021-03-05 12:37:52
- @LastEditTime: 2021-03-05 12:38:39
- @LastEditors: Please set LastEditors
- @Description: In User Settings Edit
- @FilePath: \code_formal\course\algrom\01_2.cpp
*/
#include
#include
#include
#include <string.h>
#include
#include
#include
typedef long long int ll;
using namespace std;
bool check(int u, int v)
{
if (u > v)
return false;
int cnt_u = 0, cnt_v = 0;
while (u | v)
{
cnt_u += (u & 1 ? 1 : 0);
cnt_v += (v & 1 ? 1 : 0);
u >>=1,v>>=1;
if(cnt_v > cnt_u)
return false;
}
return true;
}
int main()
{
int k;
cin >> k;
string s;
while (k–)
{
int u, v;
cin >> u >> v;
cout << (check(u, v) ? “YES” : “NO”) << endl;
}
return 0;
}