首A!
话不多说上代码
#include <bits/stdc++.h>
int n, fn, i, j, k, l;
unsigned char m[10000][1251];
int s[10000], a[20000];
int main() {scanf("%d", &n);fn = (n + 8) >> 3;for (i = 0; i < n << 1; ++i)scanf("%d", &a[i]);for (i = 0; i < n; ++i)for (j = 0; j <= n; ++j)if (a[i + j])m[i][j >> 3] ^= 1 << (j & 7);unsigned char tmp[sizeof m[0]];for (i = j = 0; i < n; ++i) {s[i] = -1;for (k = j; k < n; ++k)if (m[k][i >> 3] >> (i & 7) & 1)break;if (k == n)continue;if (j != k) {__builtin_memcpy(&tmp, &m[j], fn);__builtin_memcpy(&m[j], &m[k], fn);__builtin_memcpy(&m[k], &tmp, fn);}for (k = 0; k < n; ++k)if (k != j && (m[k][i >> 3] >> (i & 7) & 1))for (l = 0; l < fn; ++l)m[k][l] ^= m[j][l];s[i] = j++;}int ok = 1;for (i = 0; i < n && ok; ++i) {if (!(m[i][n >> 3] >> (n & 7) & 1))continue;for (j = 0; j < n; ++j)if (m[i][j >> 3] >> (j & 7) & 1)break;if (j == n)ok = 0;}if (ok) {for (i = n - 1; i >= 0; --i)printf(i ? "%d " : "%d\n", s[i] >= 0 ? m[s[i]][n >> 3] >> (n & 7) & 1 : 0);} elseputs("-1");
}
