码迷,mamicode.com
首页 > 其他好文 > 详细

D. Zookeeper and The Infinite Zoo 题解(思维)

时间:2021-03-06 14:23:16      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!