其他分享
首页 > 其他分享> > CF484A Bits

CF484A Bits

作者:互联网

CF484A Bits

题目

https://codeforces.com/problemset/problem/484/A

题解

思路

知识点:贪心,位运算。

每位独立考虑,要使 \(1\) 的数量最大,且答案最小,因此从低位开始遍历,在不超过 \(r\) 的情况下把 \(l\) 每位变 \(1\) 。

(一开始直接写了个结论,但太烦了qwq)

时间复杂度 \(O(1)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
#define ll long long

using namespace std;

/*
bool solve() {
    long long l, r;
    cin >> l >> r;
    long long tmp = l ^ r;
    int pos = -1;
    while (tmp) {
        pos++;
        tmp >>= 1;
    }
    cout << (!~pos || ((1LL << pos) - 1 | r) == r ? r : ((l & r) | (1LL << pos) - 1)) << '\n';
    return true;
}
*/

bool solve() {
    long long l, r;
    cin >> l >> r;
    for (int i = 0;i < 63;i++) {
        if ((l | (1LL << i)) <= r)l |= (1LL << i);
        else break;
    }
    cout << l << '\n';
    return true;
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) {
        if (!solve()) cout << -1 << '\n';
    }
    return 0;
}

标签:CF484A,tmp,cout,int,复杂度,long,Bits
来源: https://www.cnblogs.com/BlankYang/p/16385713.html