首页 > 其他 > 详细

CF1554 C. Mikasa(位运算+思维)

时间:2021-08-15 23:02:03      阅读:21      评论:0      收藏:0      [点我收藏+]

目录

Description

有两个数字 \(n, \ m\),求最小 \(n ⊕ i(0<=i<=m)\) 中得不到的最小值

State

\(1<=n,m<=10^9\)

\(1<=t<=30000\)

Input

5
3 5
4 6
3 2
69 696
123456 654321

Output

4
3
0
640
530866

Solution

设最小得不到的数字为 \(k\),则有 \(n⊕k>=m+1\),使得 \(k\) 最小,那么在以下四种情况中

\[n \qquad m \0 \qquad 0 \0 \qquad 1 \1 \qquad 0 \1 \qquad 1 \]

当有 \(0 \quad 1\) 的情况时,对应的 \(k\) 那一位需要为 \(1\)

而当 $1\quad 0 $ 那样的情况出现时,这时即使 \(k\) 对应的那一位为 \(0\),不等式 \(n⊕k>=m+1\) 也已经成立,此时 \(k\) 最小

Code

signed main()
{
    //IOS;
    rush(){
        sdd(n, m);
        m ++;
        int ans = 0;
        for(int i = 30; ~ i; i --){
            int a = (n >> i) & 1, b = (m >> i) & 1;
            if(a == b) continue;
            if(a > b) break;
            else{
                ans |= (1 << i);
            }
        }
        pd(ans);
    }
    return 0;
}

CF1554 C. Mikasa(位运算+思维)

原文:https://www.cnblogs.com/Segment-Tree/p/15144513.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!