标签:ble space ini printf 代码 using for inline 连接
如果\(u\&v=v\)则代表\(u\rightarrow (u+v)\)有一条单向边
有\(q(q\leq 1e5)\)次查询
询问\(u,v(1\leq u,v\leq 2^{30})\)
u是否能够到底v
首先要明白假如u可以直接到v
那么自己可以模拟一下变化
你会发现把u和v变成二进制
u的二进制前缀和必定比v大
因为必定是加法让低位上的 1 变到高位上的 1,并且二进制中 1 的数量只能变少不能变多
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef long long ll;
const int maxn=5e3+5,mod=1e7;
int main(){
int _; scanf("%d",&_);
while(_--){
int x,y,dif=0,flag=1;
scanf("%d%d",&x,&y);
for(int i=0;i<=30;i++){
if(x&(1<<i)){
dif+=1;
}
if(y&(1<<i)){
dif-=1;
}
if(dif<0){
flag=0;
break;
}
}
if(x>y) flag=0;
printf(flag?"YES\n":"NO\n");
}
return 0;
}
D. Zookeeper and The Infinite Zoo 题解(思维)
标签:ble space ini printf 代码 using for inline 连接
原文地址:https://www.cnblogs.com/hunxuewangzi/p/14487236.html