zoukankan      html  css  js  c++  java
  • UVA 12898

    思路就是有零一变化的位Or以后一定是1,And以后一定是0;那么如果b的二进制更长那么就把包含a的部分全部置为1或0,如果一样长那么就把不同的部分置为1或0。

    今天被这题坑的地方:1默认是int,如果要移到32bits以上要转成long long用1LL,血的教训。以及,数组开得太极限,很容易出错。

    #include<cstdio>
    const int maxlen = 61;
    typedef long long ll;
    
    inline int int2bit(ll x,int *a){
        int t = 0;
        while(x) {
            a[t] = x&1;
            x >>= 1;
            t++;
        }
        return t;
    }
    const ll one = 1;
    void solve(ll a,ll b,ll &Or,ll &And)
    {
        int b1[maxlen],b2[maxlen];
        int l1 = int2bit(a,b1);
        int l2 = int2bit(b,b2);
        if(l2>l1){
            ll t =(one<<l2)-1;
            Or = t;
            And = 0;
            return;
        }
        if(l2 == l1){
            int i;
            for( i = l2-1; i >= 0; i--){
                if(b1[i]!=b2[i]) break;
            }
            ll t = (one<<(i+1))-1;
            Or = b|t;
            And = b&~t;
        }
    }
    
    int main()
    {
       // freopen("in.txt","r",stdin);
       // freopen("out.txt","w",stdout);
        int t;
        scanf("%d",&t);
        for(int i = 1; i <= t; i++){
            ll Or,And,a,b;
            scanf("%lld%lld",&a,&b);
            solve(a,b,Or,And);
            printf("Case %d: %lld %lld
    ",i,Or,And);
        }
        return 0;
    }
  • 相关阅读:
    erlang 大神
    Mysql5.7全新的root密码规则
    单机多实例
    mysql 5.7源码安装
    MySQL审计功能
    MySQL升5.6引发的问题
    一千行MySQL学习笔记
    MySQL5.6新特性之GTID、多线程复制
    正确修改MySQL最大连接数的三种好用方案
    MYSQL 慢日志
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4652276.html
Copyright © 2011-2022 走看看