Loading

动物园

贪心宝宝题。注意边界。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
int n, m, k, c, b[64], d[N];
ll a[N];
map<int, int>mp;
vector<pii>l;
int main() {
    scanf("%d%d%d%d", &n, &m, &c, &k);
    for (int i = 1; i <= n; i++) {
        scanf("%lld", &a[i]);   
        for (int j = 0; j < 64; j++)
            if (a[i] & (1ll << j)) b[j] = 1;
    }
    for (int i = 1; i <= m; i++) {
        int p, q;
        scanf("%d%d", &p, &q);
        if (b[p]) mp[q] = 1;
        else l.push_back({p, q});
    }
    for (auto [p, q] : l) 
        if (!mp[q]) d[p] = 1;
    int s = 0;
    for (int i = 0; i < 64; i++) if (d[i]) s++;
    if (k == 64 && s == 0) {
        if (n == 0) puts("18446744073709551616");
        else printf("%llu\n", -(ull)n);
    } else printf("%lld\n", (1ll << (k - s)) - n);
    return 0;
}
posted @ 2025-12-17 15:38  循环一号  阅读(1)  评论(0)    收藏  举报