测试题自己写
by cff_0102 @ 2024-03-24 16:23:21
@[superise](/user/1028446) 对于前百分之二十:区间异或只有0与1两种取值,直接特判
对于另百分之三十:维护前缀异或,暴力枚举
by litjohn @ 2024-03-24 16:31:04
@[superise](/user/1028446) 你能把链接发给我吗?我想练一下这道题
by litjohn @ 2024-03-24 16:31:42
@[superise](/user/1028446) 搞错了。如果全是零,那么区间异或也全是零
by litjohn @ 2024-03-24 16:32:40
@[litjohn](/user/537934) https://www.huweibc.com/studentCourse/class?groupId=307&courseId=50&contestId=15313#testTab=15316_2
by superise @ 2024-03-24 16:34:08
@[superise](/user/1028446) 对于百分之百:有一个性质若a^b=c则a^c=b。可以用map统计所有当前前缀异或目标值的个数再累加。
by litjohn @ 2024-03-24 16:35:20
@[superise](/user/1028446) 算了。我去不了。让我试着写一下代码。等会见。
by litjohn @ 2024-03-24 16:37:18
@[litjohn](/user/537934) 可以帮忙写个程序吗
by superise @ 2024-03-24 16:37:53
@[litjohn](/user/537934) 麻烦快一点,很急,求你了
by superise @ 2024-03-24 16:38:43
@[superise](/user/1028446) 这个代码你先试试。是个暴力,应该能有30$\sim$50分。
```cpp
#include <bits/stdc++.h>
using namespace std;
int n, xr[200005], sum[200005], ans;
vector<int> a;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
a.resize(n + 5);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
xr[i] = xr[i - 1] ^ a[i];
sum[i] = sum[i - 1] + a[i];
}
for (int i = 1; i <= n; ++i) {
for (int j = i; j <= n; ++j) {
if ((xr[j] ^ xr[i - 1]) == sum[j] - sum[i - 1]) {
ans++;
}
}
}
cout << ans;
return 0;
}
```
by litjohn @ 2024-03-24 16:43:47