题解 P2447 【[SDOI2010]外星千足虫】

题目链接

Solution [SDOI2010]外星千足虫

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

高斯消元


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

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

#include 
#include 
#include 
using namespace std;
const int maxn = 1024;
bitset 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(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;
}

你可能感兴趣的:(题解 P2447 【[SDOI2010]外星千足虫】)