zoukankan      html  css  js  c++  java
  • Codeforces Global Round 13 D

    Codeforces Global Round 13 D

    大意

    给定一幅无限节点的有向图,顶点u指向顶点u+v的充要条件是 (u&v=v)

    现在有q组询问,每次询问给出u,t,问:能否从u到t,回答 yes/no

    思路

    找规律...

    以下皆为2进制

    1. u+v 的位为1的个数小于等于 u 的位为1的个数,因为从 u+v 到 u的过程中,为1位的个数不会削减
    2. 从最低位考虑u+v,和u,此时前者0的个数必须时刻大于等于后者
    3. u+v >= u(u<=t)

    证明从心(

    代码

    #include <map>
    #include <set>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    #define ll long long
    #define ull unsigned long long
    #define cint const int&
    #define Pi acos(-1)
    
    const int mod = 1e9+7;
    const int inf_int = 0x7fffffff;
    const ll inf_ll = 0x7fffffffffffffff;
    const double ept = 1e-9;
    
    int q;
    
    bool check(int f, int t) {
        if(f > t) return 0;
        if(f == t) return 1;
    
        int r = 0, s = 0;
        while(t) {
            if(f) {
                if(!(f&1)) -- r;
                else -- s;
                f >>= 1;
            }
            if(!(t&1)) ++ r;
            else ++ s;
            t >>= 1;
            if(r < 0) return 0;
        }
        if(s > 0) return 0;
        return 1;
    }
    
    int main() {
        cin >> q;
        while(q--) {
            int u, v;
            cin >> u >> v;
            if(check(u, v)) cout << "Yes" << endl;
            else cout << "No" << endl;
        }
        return 0;
    }
    

    30min, -1

  • 相关阅读:
    OpenCV学习(8.22)
    Arduino学习(一)
    OpenCV学习(7.17)
    OpenCV学习(7.16)
    OpenCV学习(7.14)
    OpenCV学习(7.13)
    Android Touch事件传递机制解析
    Android-ViewPagerIndicator
    Android-xUtils-使用GET方式,从服务器获取json字符串
    Android-SlidingMenu-显示隐藏侧边栏
  • 原文地址:https://www.cnblogs.com/ullio/p/14495078.html
Copyright © 2011-2022 走看看