题目链接

题目大意:给定形如\(\sum a_ix_i \equiv m (mod\;2)\)的方程组,求解所有\(x \; mod\;2\)的值

高斯消元


分析:在模\(2\)意义下的运算实际上就是异或,所以这题就是高斯消元求解异或方程组的板子题

有不同之处就是要输出最少前多少个方程可以求解,这个在消元过程中从每个主元选取的行编号中取最大值即可

#include <iostream>
#include <string>
#include <bitset>
using namespace std;
const int maxn = 1024;
bitset<maxn> val[maxn << 1];
string a,b;
int n,m,ans;
int main(){
	ios::sync_with_stdio(false);
	cin >> n >> m;
	for(int i = 1;i <= m;i++)
		cin >> a >> b,val[i] = bitset<maxn>(a + b);
	for(int i = 1;i <= n;i++){
		int r = i;
		while(r <= m && !val[r][i])r++;
		if(r == m + 1){
			cout << "Cannot Determine\n";
			return 0;
		}
		ans = max(ans,r);
		swap(val[i],val[r]);	
		for(int k = 1;k <= m;k++)
			if(k != i && val[k][i])val[k] ^= val[i];
	}
	cout << ans << '\n';
	for(int i = n;i >= 1;i--)
		cout << (val[i][0] ? "?y7M#" : "Earth") << '\n';
	return 0;
}

相关文章: