第一道高斯消元题目~

题目:有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关,如果为关就变为开。你的目标是经过若干次开关操作后使得最后N个开关达到一个特定的状态。对于任意一个开关,最多只能进行一次开关操作。你的任务是,计算有多少种可以达到指定状态的方法。(不计开关操作的顺序)0<=N<=29

我们用样例来模拟一下:

我的高斯消元求解异或方程组模版:

 int gauss()
{
int i,j,k,l;
//j=当前要消第几个元
//i=当前消了几个元+1(n-i+1就是自由元个数),也就是当前j要处理的这个方程将要放在第i行,构成上三角矩阵。
//i、j不等是因为有些元是自由元,不需要消,这些方程放到最后面(维护上三角矩阵)。
for(i=,j=;i<=n && j<=n;j++)
{
for(k=j;k<=n;k++)
if(a[k][j]) break;//先找到一个这个元的系数不为0方程的换到第i行。
if(a[k][j])
{
for(l=;l<=n+;l++) swap(a[i][l],a[k][l]);
for(l=;l<=n;l++)//注意这里从1开始,因为把最后回代的过程合并了
{
if(l!=i && a[l][j])//如果系数不为0才异或消元
for(k=;k<=n+;k++)
a[l][k]^=a[i][k];
}
i++;
}
}
for(j=i;j<=n;j++)
if(a[j][n+]) return -;
return <<(n-i+);
}

说一下解的个数问题:

对增广矩阵[A b]做初等行变换,化成阶梯形(高斯消元法),如果存在[0,0,…,0,1]的行,就是无解;如果存在r行[0,0,…,0,0],就意味着有r个自由变量,因为这里的变量只取0/1,所以有2r个解;如果不存在[0,0,…,0,*],即把最后一行去掉后不存在全0行,则A为满秩矩阵,则方程组有唯一解。

代码:

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std; const int N=;
int n,bit[N],a[N][N]; void output()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n+;j++)
printf("%d ",a[i][j]);
printf("\n");
}
printf("\n");
} int gauss()
{
int i,j,k,l;
//j=当前要消第几个元
//i=当前消了几个元+1(n-i+1就是自由元个数),也就是当前j要处理的这个方程将要放在第i行,构成上三角矩阵。
//i、j不等是因为有些元是自由元,不需要消,这些方程放到最后面(维护上三角矩阵)。
for(i=,j=;i<=n && j<=n;j++)
{
for(k=j;k<=n;k++)
if(a[k][j]) break;//先找到一个这个元的系数不为0方程的换到第i行。
if(a[k][j])
{
for(l=;l<=n+;l++) swap(a[i][l],a[k][l]);
for(l=;l<=n;l++)//注意这里从1开始,因为把最后回代的过程合并了
{
if(l!=i && a[l][j])//如果系数不为0才异或消元
for(k=;k<=n+;k++)
a[l][k]^=a[i][k];
}
i++;
}
}
for(j=i;j<=n;j++)
if(a[j][n+]) return -;
return <<(n-i+);
} int main()
{
int T,x,y;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(a,,sizeof(a));
for(int i=;i<=n;i++) scanf("%d",&a[i][n+]);
for(int i=;i<=n;i++)
{
scanf("%d",&x);
a[i][n+]^=x;
}
while()
{
scanf("%d%d",&x,&y);
if(!x && !y) break;
a[y][x]=;
}
for(int i=;i<=n;i++) a[i][i]=;
int ans=gauss();
if(ans==-) printf("Oh,it's impossible~!!\n");
else printf("%d\n",ans);
}
return ;
}

【poj1830-开关问题】高斯消元求解异或方程组的更多相关文章

  1. 【poj1222-又一道开关问题】高斯消元求解异或方程组

    题意:给出一个5*6的图,每个灯泡有一个初始状态,1表示亮,0表示灭.每对一个灯泡操作时,会影响周围的灯泡改变亮灭,问如何操作可以使得所有灯泡都关掉. 题解: 这题和上一题几乎完全一样..就是要输出解 ...

  2. 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组

    [题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...

  3. bzoj千题计划187:bzoj1770: [Usaco2009 Nov]lights 燈 (高斯消元解异或方程组+枚举自由元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1770 a[i][j] 表示i对j有影响 高斯消元解异或方程组 然后dfs枚举自由元确定最优解 #in ...

  4. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10835   Accepted: 6 ...

  5. [POJ1830]开关问题(高斯消元,异或方程组)

    题目链接:http://poj.org/problem?id=1830 题意:中文题面,求的是方案数. 首先可以知道, 如果方案数不止一个的话,说明矩阵行列式值为0,即存在自由变元,由于变量只有两种状 ...

  6. poj1830 开关问题[高斯消元]

    其实第一反应是双向BFS或者meet in middle,$2^{14}$的搜索量,多测,应该是可以过的,但是无奈双向BFS我只写过一题,已经不会写了. 发现灯的操作情况顺序不影响结果,因为操作相当于 ...

  7. [POJ1222]EXTENDED LIGHTS OUT(高斯消元,异或方程组)

    题目链接:http://poj.org/problem?id=1222 题意:开关是四连通的,每按一个就会翻转自己以及附近的四个格(假如有).问需要翻转几个,使他们都变成关. 把每一个灯看作一个未知量 ...

  8. [POJ1681]Painter's Problem(高斯消元,异或方程组,状压枚举)

    题目链接:http://poj.org/problem?id=1681 题意:还是翻格子的题,但是这里有可能出现自由变元,这时候枚举一下就行..(其实这题直接状压枚举就行) /* ━━━━━┒ギリギリ ...

  9. 【poj2947】高斯消元求解同模方程组【没有AC,存代码】

    题意: p start enda1,a2......ap (1<=ai<=n)第一行表示从星期start 到星期end 一共生产了p 件装饰物(工作的天数为end-start+1+7*x, ...

随机推荐

  1. node.js安装部署

    node  js  安装部署学习 CentOS 下安装 Node.js 1.下载源码,你需要在https://nodejs.org/en/download/下载最新的Nodejs版本,链接: http ...

  2. #Leetcode# 700. Search in a Binary Search Tree

    https://leetcode.com/problems/search-in-a-binary-search-tree/ Given the root node of a binary search ...

  3. Oracle 11g 体系结构--数据字典

    DD:存放数据库内部信息的地方,用于描述数据库内部的运行和管理情况. Oracle数据字典的名称由前缀和后缀组成,使用_连接,含义说明如下: dba_:包含数据库实例的所有对象信息 v$_:当前实例的 ...

  4. zoj3209-Treasure Map

    给出一个左下角为\((0,0)\),右上角为\((n,m)\)的矩形,再给出\(k\)个在大矩形内的小矩形(可以重合),问是否能用这些小矩形完全覆盖这个大矩形,并且没有重合,如果可以至少需要多少个. ...

  5. hdu 3339 In Action (最短路径+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. Dom事件的三种绑定方式

    1.事件 2.  onclick, onblur, onfocus, 需求:请写出一个行为,样式,结构,相分离的页面.   JS,   CSS,  HTML, 示例1,行为结构样式粘到一起的页面: & ...

  7. POJ 3261 Milk Patterns (后缀数组,求可重叠的k次最长重复子串)

    Milk Patterns Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 16742   Accepted: 7390 Ca ...

  8. 【Codeforces Round #405 ( Div 2)】题解

    Bear and Big Brother 签到题,直接模拟就可以了. Bear and Friendship Condition 满足只能是每个朋友圈中每个人和其他人都是朋友,这样的边数的确定的. 然 ...

  9. 解析Fetch实现请求数据

    一 序言 在 传统Ajax 时代,进行 API 等网络请求都是通过XMLHttpRequest或者封装后的框架进行网络请求,然而配置和调用方式非常混乱,对于刚入门的新手并不友好.今天我们介绍的Fetc ...

  10. Windows相关

    PE WIndows 相关知识 windows 主机防护