1 条题解

  • 8
    @ 2023-7-23 22:11:19

    每人发题解?我来发一个[doge] 看完记得点赞哦~

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int N = 1000005;
    typedef unsigned long long ll;
    int n, m, c, K;
    bool vis[64];
    ll a[N];
    int main() {
        scanf("%d%d%d%d", &n, &m, &c, &K);
        ll sum = 0;
        for (int i = 1; i <= n; i++) {
            ll x; 
            scanf("%llu", &x); 
            sum |= x;
            // 可以做到统计在已经饲养的动物中,每一个二进制位出现的1
        }
        int k = K;
        for (int i = 1; i <= m; i++)
        {
            int p,q;
            scanf("%d%d", &p, &q);
            if (!(sum >> p & 1) && vis[p] == false)
            // sum >> p & 1 表示 在已经饲养的动物中,第p个二进制位是否为1
            {
                vis[p] = true;//,去重
                k--;
            }
        }
        //设能选的位数是 k,答案就是  2^k - n 
        if (k == 64) 
        {
            if (n == 0) puts("18446744073709551616");//2^64超范围
        } 
        else printf("%llu\n", (1ull << k) - n);
    }
    

    已AC,放心食用!

    • 1

    信息

    ID
    1362
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    58
    已通过
    43
    上传者