CSP-S 2020 动物园

简单题。

可以发现,\(c\)\(q_i\) 是没有任何用的,因为题目保证了 \(q_i\) 互不相同。

考虑如果 \(n\) 个数中如果没有元素的第 \(p_i\) 位为 \(1\),说明这个 \(q_i\) 不会被购买,所以在最终答案中,第 \(p_i\) 位为 \(1\) 的不能被计算。设 \(x\) 为去掉这些 \(p_i\) 后的结果,则答案为 \(2^{x} - n\)

时间复杂度为 \(O(n \log n)\)

#include <bits/stdc++.h>

typedef unsigned long long ULL;
const int N = 1000005;

ULL a[N];
bool cnt[65];

void write(__int128 x) {
  if (x < 0) putchar('-');
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int n, m, c, k;
  std::cin >> n >> m >> c >> k;
  for (int i = 1; i <= n; i++) {
    std::cin >> a[i];
    for (int j = 0; j < 64; j++)
      if ((a[i] >> j) & 1) cnt[j] = true;
  }
  std::set<int> s;
  for (int i = 1; i <= m; i++) {
    int p, q;
    std::cin >> p >> q;
    if (!cnt[p]) s.insert(p);
  }
  k -= s.size();
  __int128 ans = 1;
  for (int i = 1; i <= k; i++) ans *= 2;
  ans -= n;
  write(ans);
  return 0;
}
posted @ 2024-10-09 00:03  Unino  阅读(10)  评论(0)    收藏  举报