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

浙公网安备 33010602011771号