我是靠谱客的博主 老实乌龟,最近开发中收集的这篇文章主要介绍【高斯消元】【异或方程组】【bitset】bzoj1923 [Sdoi2010]外星千足虫,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Xor方程组解的个数判定:
——莫涛《高斯消元解Xor方程组》
使用方程个数判定:消去第i个未知数时,都会记录距第i个方程最近的第i位系数不为0の方程是谁,这个的max就是使用方程个数。
使用bitset加速。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<bitset>
using namespace std;
#define N 1001
#define M 2001
int n,m,use;
char s[N];
bool A[M][N+1],x[N],b[M];
bitset<N+1>B[M];
bool guass_jordan()
{
for(int i=1;i<=m;++i)
for(int j=1;j<=n;++j)
B[i][j]=A[i][j];
for(int i=1;i<=m;++i)
B[i][n+1]=b[i];
for(int i=1;i<=n;++i)
{
int j=i;
for(;j<=m;++j)
if(B[j][i])
break;
if(j==m+1)
return 0;
use=max(use,j);
swap(B[i],B[j]);
for(j=1;j<=m;++j)
if(i!=j&&B[j][i])
B[j]^=B[i];
}
for(int i=1;i<=m;++i) x[i]=B[i][n+1];
return 1;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%s%d",s,&b[i]);
for(int j=0;j<n;++j)
A[i][j+1]=s[j]-'0';
}
if(!guass_jordan())
puts("Cannot Determine");
else
{
printf("%dn",use);
for(int i=1;i<=n;++i)
puts(x[i]?"?y7M#":"Earth");
}
return 0;
}
转载于:https://www.cnblogs.com/autsky-jadek/p/4344510.html
最后
以上就是老实乌龟为你收集整理的【高斯消元】【异或方程组】【bitset】bzoj1923 [Sdoi2010]外星千足虫的全部内容,希望文章能够帮你解决【高斯消元】【异或方程组】【bitset】bzoj1923 [Sdoi2010]外星千足虫所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复