x转二进制 每次末尾加‘0’反转或末尾加‘1’ 反转看能不能转化成y
#include<bits/stdc++.h>
#include<set>
#include<stack>
#include<queue>
#include<vector>
#define lowbit(x) (x&-x)
#define int long long
using namespace std;
const int N=1e5;
typedef pair<int,int>PII;
int m,n;
string get(int x)
{
string s="";
while(x)
{
s+=(x%2+'0');
x/=2;
}
reverse(s.begin(),s.end());
return s;
}
string work(string s)
{
while(s.back()=='0') s.pop_back();
reverse(s.begin(),s.end());
return s;
}
int dd(int x,int y)
{
queue<string > que;
map<string, bool > book;
que.push(get(x));
auto Y=get(y);
book[get(x)]=1;
while(!que.empty())
{
string t=que.front();
que.pop();
if(t.length()>70) continue;
for(char i='0'; i<='1'; i++)
{
string s=work(t+i);
if(book[s]) continue;
if(s==Y) return 1;
book[s]=1;
que.push(s);
}
}
return x==y;
}
signed main()
{
int i,j,x,y;
cin>> x>> y;
if(dd(x,y)) printf("YES\n");
else printf("NO\n");
return 0;
}