【POJ1830】开关问题 高斯消元求自由元

#include <stdio.h>
int main()
{
	puts("转载请注明出处[vmurder]谢谢");
	puts("网址:blog.csdn.net/vmurder/article/details/43482357");
}

题意:中文题。

题解:

呃,求自由元个数,然后输出1<<ans;(自由元就是高斯消元消某个变量x时发现以下所有方程当前此位系数都是0)

如果无解输出那个题中给的串。

诶网上代码真不可看,我绝望了决定照自己想法随便写写。

然后49行没压行搞过去了。

网上全是100行+什么心态。

然后还复杂难看。

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 40
#define inf 0x3f3f3f3f
using namespace std;

bool a[N][N],ans[N];

int Gauss(int n,int m)
{
	int i,j,k,ret=0,id;
	for(id=i=1;i<n;i++,id++)
	{
		for(j=id;j<=m&&!a[j][i];j++);
		if(j>m){id--,ret++;continue;}
		if(id!=j)for(k=i;k<=n;k++)swap(a[id][k],a[j][k]);
		for(j=id+1;j<=m;j++)if(a[j][i])for(k=i;k<=n;k++)
			a[j][k]^=a[id][k];
	}
	for(i=id;i<=m;i++)if(a[i][n])return -1;
	return ret;
}
int n;
int main()
{
//	freopen("test.in","r",stdin);

	int i,j,k,g;
	int x,y;
	for(scanf("%d",&g);g--;)
	{
		memset(a,0,sizeof a);

		scanf("%d",&n);
		for(i=1;i<=n;i++)scanf("%d",&a[i][n+1]);
		for(i=1;i<=n;i++)scanf("%d",&k),a[i][n+1]^=k;
		for(i=1;i<=n;i++)a[i][i]=1;
		while(scanf("%d%d",&x,&y),x+y)a[y][x]=1;

		x=Gauss(n+1,n);
		if(x==-1)puts("Oh,it's impossible~!!");
		else printf("%d\n",1<<x);
	}
	return 0;
}
时间: 2024-10-06 21:45:07

【POJ1830】开关问题 高斯消元求自由元的相关文章

Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是完全平方数 求有多少种方案 思路:每个数分解因子 每隔数可以选也可以不选 0 1表示 然后设有m种素数因子 选出的数组成的各个因子的数量必须是偶数 组成一个m行和n列的矩阵 每一行代表每一种因子的系数 解出自由元的数量 #include <cstdio> #include <cstring> #include <algorithm&g

hdu 2262 高斯消元求期望

Where is the canteen Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1070    Accepted Submission(s): 298 Problem Description After a long drastic struggle with himself, LL decide to go for some

高斯消元 求整数解模版

#include <iostream> #include <string.h> #include <cmath> using namespace std; const int maxn = 105; int equ, var; // 有equ个方程,var个变元.增广阵行数为equ, 分别为0到equ - 1,列数为var + 1,分别为0到var. int a[maxn][maxn]; int x[maxn]; // 解集. bool free_x[maxn]; //

hdu 3992 AC自动机上的高斯消元求期望

Crazy Typewriter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 391    Accepted Submission(s): 109 Problem Description There was a crazy typewriter before. When the writer is not very sober, it

hdu 4418 高斯消元求期望

Time travel Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1480    Accepted Submission(s): 327 Problem Description Agent K is one of the greatest agents in a secret organization called Men in B

uva 10828 高斯消元求数学期望

Back to Kernighan-RitchieInput: Standard Input Output: Standard Output You must have heard the name of Kernighan and Ritchie, the authors of The C Programming Language. While coding in C, we use different control statements and loops, such as, if-the

poj 1830 开关问题 高斯消元

mnesia在频繁操作数据的过程可能会报错:** WARNING ** Mnesia is overloaded: {dump_log, write_threshold},可以看出,mnesia应该是过载了.这个警告在mnesia dump操作会发生这个问题,表类型为disc_only_copies .disc_copies都可能会发生. 如何重现这个问题,例子的场景是多个进程同时在不断地mnesia:dirty_write/2 mnesia过载分析 1.抛出警告是在mnesia 增加dump

HDU4870_Rating_双号从零单排_高斯消元求期望

原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 654    Accepted Submission(s): 415 Special Judge Problem Description A little gir

【bzoj2460】[BeiJing2011]元素 贪心+高斯消元求线性基

题目描述 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制出法杖,这个现象被称为“魔法抵消” .特别地,如果在炼制过程中使用超过一块同一种矿石,那么一定会发生“魔法抵消”. 后来,随着人们认知水平的提高,这个现象得到了很好的解释.经过了大量的实验后,著名法师 D