开关问题
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 4653   Accepted: 1675

Description

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

Input

输入第一行有一个数K,表示以下有K组测试数据。 
每组测试数据的格式如下: 
第一行 一个数N(0 < N < 29) 
第二行 N个0或者1的数,表示开始时N个开关状态。 
第三行 N个0或者1的数,表示操作结束后N个开关的状态。 
接下来 每行两个数I J,表示如果操作第 I 个开关,第J个开关的状态也会变化。每组数据以 0 0 结束。 

Output

如果有可行方法,输出总数,否则输出“Oh,it's impossible~!!” 不包括引号

Sample Input

2
3
0 0 0
1 1 1
1 2
1 3
2 1
2 3
3 1
3 2
0 0
3
0 0 0
1 0 1
1 2
2 1
0 0

Sample Output

4
Oh,it's impossible~!!

Hint

第一组数据的说明: 
一共以下四种方法: 
操作开关1 
操作开关2 
操作开关3 
操作开关1、2、3 (不记顺序) 

Source

LIANGLIANG@POJ
题解:构造一个矩阵,利用增广矩阵化成行阶梯阵,然后判断是否有解,该题是01矩阵,“无穷解的情况”也是有穷种情况的,附上高斯消元的步骤和判断
首先,先介绍程序中高斯消元法的步骤:
(我们设方程组中方程的个数为equ,变元的个数为var,注意:一般情况下是n个方程,n个变元,但是有些题目就故意让方程数与变元数不同)
1. 把方程组转换成增广矩阵。
2. 利用初等行变换来把增广矩阵转换成行阶梯阵。
枚举k从0到equ – 1,当前处理的列为col(初始为0) ,每次找第k行以下(包括第k行),col列中元素绝对值最大的列与第k行交换。如果col列中的元素全为0,那么则处理col + 1列,k不变。
3. 转换为行阶梯阵,判断解的情况。
① 无解
当方程中出现(0, 0, …, 0, a)的形式,且a != 0时,说明是无解的。
② 唯一解
条件是k = equ,即行阶梯阵形成了严格的上三角阵。利用回代逐一求出解集。
③ 无穷解。
条件是k < equ,即不能形成严格的上三角形,自由变元的个数即为equ – k,但有些题目要求判断哪些变元是不缺定的。
#include<stdio.h>
#include<string.h>
int a[33][33],n;
int gauss()
{int i,j,k,t,temp;for(i=j=1;i<=n&&j<=n;j++){for(k=j;k<=n;k++) if(a[k][j]) break;if(a[k][j]){for(t=1;t<=n+1;t++)temp=a[i][t],a[i][t]=a[k][t],a[k][t]=temp;for(t=1;t<=n;t++){if(t!=i&&a[t][j])for(k=1;k<=n+1;k++)a[t][k]^=a[i][k];}i++;}}for(k=i;k<=n;k++) if(a[k][n+1]) return -1;return 1<<(n-(i-1));
}
int main()
{int t,i,x,y,res;scanf("%d",&t);while(t--){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",&x);a[i][n+1]^=x,a[i][i]=1;}while(scanf("%d%d",&x,&y),x&&y) a[y][x]=1;res=gauss();if(res==-1) printf("Oh,it's impossible~!!\n");else printf("%d\n",res);}return 0;
}

pku 1830 开关问题(构造矩阵+高斯消元)相关推荐

  1. POJ 1830 开关问题 【01矩阵 高斯消元】

    任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...

  2. 开关问题(模板+高斯消元)

    开关问题 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 7771   Accepted: 3058 Description ...

  3. CF1616F Tricolor Triangles(构造、高斯消元)

    解析 关键性质:三元环合法等价于边权和模3等于0. 还有一个常识:三元环的级别是O(mm)O(m\sqrt m)O(mm​). 证明: 三个点度数都大于 m\sqrt mm​ 的点不超过Cm3=mmC ...

  4. 【BZOJ3503】【Cqoi2014】和谐矩阵 高斯消元,解异或方程组

    #include <stdio.h> int main() {puts("转载请注明出处");puts("地址:blog.csdn.net/vmurder/a ...

  5. hdu 5755 Gambler Bo 三进制高斯消元(开关问题变形)

    题目链接 题意: 给出一个模3意义下的矩阵,每次选中一个元素就可以使得自身+2,上下左右元素+1.求所有元素变成0的一种解. 思路: 这个题目高斯消元复杂度明明是O(n^3)的啊,这个题O((n*m) ...

  6. bzoj 3503: [Cqoi2014]和谐矩阵(高斯消元)

    3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSec  Special Judge Submit: 1101  Solved ...

  7. 开关问题 POJ - 1830 高斯消元

    开关问题 POJ - 1830 有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变 ...

  8. POJ 1830 开关问题 高斯消元

    题意:给你N个开关,其中某些开关之间是相互影响的,即一个开关控制多个,那么每个开关操作与否为一个变元,有N个变元,开关之间相互影响的系数设为1,否则为0,对模2高斯消元求解自由变元个数. #inclu ...

  9. poj 1830 开关问题 高斯消元

    题目链接 高斯消元模板, 判断是否有解以及变元的数量. 1 #include <iostream> 2 #include <vector> 3 #include <cst ...

最新文章

  1. 屈才了!当程序员会写诗后...... | 每日趣闻
  2. 正确配置Linux系统ulimit值的方法
  3. 开始VC之路--创建窗体
  4. 使用C语言中的宏来定位出错信息
  5. axure 组件_技巧分享 | Axure后台组件制作的全过程
  6. [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析
  7. (HDOJ 2034)人见人爱A-B
  8. Python While 循环语句
  9. Python:程序生成Windows可执行文件/不显示命令执行窗口/无法生成exe报错TypeError: an integer is required (got type bytes)解决方法
  10. 个人电脑防止被入侵的设置方法。
  11. 通过apizza生成python接口测试代码
  12. Windows Server 无法启用 网络发现
  13. 第一章、Android基础入门 - Android移动开发基础笔记
  14. ios html fixed,关于IOS的Safari浏览器fixed定位失效的那些坑
  15. 计算机无法识别新挂硬盘,windows10系统添加新硬盘识别不了如何解决
  16. 织梦教程:DEDEcms还原数据后后台乱码
  17. Sentinel vs Hystrix 对比,你怎么选?
  18. Error: Unknown command: cask
  19. 听“前微软系”AI大牛讲“京东新生活”
  20. Unity3D 取消发布游戏启动时的设置窗口并窗口化运行

热门文章

  1. 51单片机的特殊寄存器
  2. 嵌入式开发学习笔记6-了解单片机中的特殊功能寄存器(定时器/计数器)
  3. 使用itextpdf生成pdf,设置图片和中文
  4. 最全Edge浏览器安装扩展程序步骤
  5. Matlab【可视化作图】绘制线电压相电压辅助线
  6. dio设置自定义post请求_flutter Dio封装get/post请求
  7. 【NOIP】合唱队形
  8. iOS fastlane 自动打包,上传蒲公英
  9. Keil软件常见配置
  10. 流量战争:中国互联网的新一轮上山下乡运动