「Cfz Round 2」Binary 题解
题意还是比较明确的。首先我们需要知道异或的两个性质:
遇到没思路的时候,先来看几个栗子:
观察到:如果
如果
换句话说,每一个
最后考虑一个边缘情况:
赛时码:
#include <iostream>
using namespace std;
const int N = 2e5 + 10;
int res[N];
int main (void)
{
int t;
ios::sync_with_stdio (false), cin.tie (0), cout.tie (0);
cin >> t;
while (t--) {
int n, sum = 0, high = 0;
cin >> n;
for (int i = 0; i <= n; i++) {
int v;
cin >> v;
if ((sum ^= v) == 0 && i < n) res[n - i - 1] = 1, high = max (high, n - i - 1);
}
if (!sum) {
int q = 0;
while (res[q]) res[q++] = 0;
res[q] = 1;
}
for (int i = high; i >= 0; i--) cout << res[i];
cout << '\n';
for (int i = 0; i <= high; i++) res[i] = 0;
}
return 0;
}