#12183. 珅泽教育CSP-J第一轮模拟考第二十二套 第 42 题
珅泽教育CSP-J第一轮模拟考第二十二套 第 42 题
三、完善程序(单选题,每小题 3 分,共计 30 分)
程序(2):异或和
给定序列 ,求其所有子区间异或和的和。某个区间的异或和是将区间内的所有数字进行异或运算。其中 ,。
提示:对每一位独立计算,对右端点扫描,并用异或前缀和辅助统计。试补全程序。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
int n, a[N], cnt[2];
long long ans;
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i], ①;
for (int bit = ②; ③; bit--) {
cnt[0] = cnt[1] = 0;
for (int i = 0; i <= n; i++) {
cnt[④]++;
ans += 1LL * ⑤;
}
}
cout << ans;
}
- ④ 处应填( )。
{{ select(1) }}
(a[i] >> bit) & 1a[i] & (1 << bit)a[i] & (1LL << bit)(a[i] >> bit) ^ 1