[CSP-S2020] 动物园

CSP-2020动物园

#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);
}
上一篇:nflsoj 20034 #10302.「2020联考北附1」山遥路远


下一篇:CPU浓缩知识回顾