其他分享
首页 > 其他分享> > 2022.6.13 CF两题

2022.6.13 CF两题

作者:互联网

摘要:两道涉及位运算的800分题,不会做

  1. A. Cirno's Perfect Bitmasks Classroom
    链接A. Cirno's Perfect Bitmasks Classroom

题意:对于一个给定的数 \(n\),找到使 x AND y > 0 且 x XOR y > 0 的最小正整数 y,其中n < 2^30

解析:即要满足 x 和 y 的最低位 1 相同,且存在不同的一位,考虑到 2^30 约等于 1e9,可以暴力。先用lowbit()找到最低位 1 再枚举。代码如下:

#include <iostream>
#include <algorithm>

using namespace std;
using i64 = long long;

int lowbit(int x) {
    return x & (-x);
}

void solve() {
    int x;
    cin >> x;

    int y = lowbit(x);
    while (!(x & y && x ^ y)) {
        y++;
    }
    
    cout << y << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;

    while (t--) {
        solve();
    }

    return 0;
}

标签:Perfect,13,int,lowbit,Cirno,long,while,两题,2022.6
来源: https://www.cnblogs.com/isrol/p/16373049.html