1. 程式人生 > 其它 >[CSP-S2020] 動物園

[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);
}