我是靠谱客的博主 老实乌龟,这篇文章主要介绍【高斯消元】【异或方程组】【bitset】bzoj1923 [Sdoi2010]外星千足虫,现在分享给大家,希望可以做个参考。

Xor方程组解的个数判定:

——莫涛《高斯消元解Xor方程组》

使用方程个数判定:消去第i个未知数时,都会记录距第i个方程最近的第i位系数不为0の方程是谁,这个的max就是使用方程个数。

使用bitset加速。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(103)

评论列表共有 0 条评论

立即
投稿
返回
顶部