题目
题意:当u&(u+v)时,u可以到v,判断u是否可以到v
思路:1、当u>v时false
2、当u中得1 得个数少于v中1的个数的时候false
3、对与v中的所有的1,在u的对应左边都会有1否则false
4、剩下的true
AC代码:
package 练习;
import java.io.*;
import java.lang.*;
import java.util.*;
import java.io.*;
import java.util.*;
public class Main{
static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
int q=scanner.nextInt();
while(q-->0) {
int u=scanner.nextInt();
int v=scanner.nextInt();
boolean b=true;
if(u>v) {System.out.println("No");continue;}
int x=u,y=v;
int xx=0,yy=0;
while(x>0) {xx+=x%2;x/=2;}
while(y>0) {yy+=y%2;y/=2;}
if(xx<yy) {System.out.println("No");continue;}
Queue<Integer>xQueue=new LinkedList<Integer>();
Queue<Integer>yQueue=new LinkedList<Integer>();
int s=0;
while(u>0) {
if(u%2==1)xQueue.add(s);
u/=2;
s++;
}
s=0;
while(v>0) {
if(v%2==1)yQueue.add(s);
v/=2;
s++;
}
while(!yQueue.isEmpty()) {
if(yQueue.poll()<xQueue.poll()) {
b=false;
break;
}
}
if(b)System.out.println("Yes");
else System.out.println("No");
}
}
}