[SDOI 2010]外星千足虫
Description
给出 $m$ 个 $n$ 元的 $0,1$ 方程,即系数非 $0$ 即 $1$ ,方程的结果为奇偶性。
$1\leq n\leq 1000,1\leq m\leq 2000$
Solution
类似于 [JLOI 2015]装备购买 ,维护高斯消元的上三角。
由于方程满足异或性质,直接用 $bitset$ 维护即可。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n, m, tot;
string s;
bitset<N> A[N];
void insert(bitset<N> S) {
for (int i = 0; i < n; i++)
if (S[i]) {
if (A[i].any()) S ^= A[i];
else {A[i] = S; ++tot; break; }
}
}
void work() {
scanf("%d%d", &n, &m);
if (n > m) {puts("Cannot Determine"); return; }
for (int i = 1; i <= m; i++) {
cin >> s; bitset<N> S(s);
cin >> s; if (s[0] == '1') S.flip(n);
insert(S); if (tot == n) {printf("%d\n", i); break; }
}
if (tot < n) {puts("Cannot Determine"); return; }
for (int i = n-1; i >= 0; i--)
for (int j = i-1; j >= 0; j--)
if (A[j][i]) A[j] ^= A[i];
for (int i = n-1; i >= 0; i--) puts(A[i][n] ? "?y7M#" : "Earth");
}
int main() {work(); return 0; }
博主蒟蒻,随意转载。但必须附上原文链接:http://www.cnblogs.com/NaVi-Awson/,否则你会终生找不到妹子!!!