Problem - 1618F - Codeforces
x转二进制 每次末尾加‘0’反转或末尾加‘1’ 反转看能不能转化成y
#include#include #include #include #include #define lowbit(x) (x&-x) #define int long long using namespace std; const int N=1e5; typedef pair 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 que; map 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("YESn"); else printf("NOn"); return 0; }



