题解 P2447 【[SDOI2010]外星千足虫】
作者:互联网
Solution [SDOI2010]外星千足虫
题目大意:给定形如\(\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;
}
标签:求解,int,题解,SDOI2010,异或,P2447,include,高斯消 来源: https://www.cnblogs.com/colazcy/p/11714952.html