开关问题

题意:给n(0 < n < 29)开关的初始和最终状态(01表示),以及开关之间的关联关系(关联关系是单向的输入a b表示a->b),问有几种方式得到最终的状态。否则输出字符字面值。

1.与poj 1222的区别:关联为单向,需要预处理出每个开关对自己的关联(开始在输入关联关系中处理自身的关联,WA了两发),操作的矩阵(变换的矩阵)为初始状态XOR最终状态;

2.处理完之后判断系数全为0的最终结果a[k][var]是否为0来判断是否无解。同时如有n个自由变元,由于每个变元只有两种状态,所以只有2^n个方案。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string.h>
  5. #include<algorithm>
  6. #include<map>
  7. #include<queue>
  8. #include<vector>
  9. #include<cmath>
  10. #include<stdlib.h>
  11. #include<time.h>
  12. using namespace std;
  13. #define rep0(i,l,r) for(int i = (l);i < (r);i++)
  14. #define rep1(i,l,r) for(int i = (l);i <= (r);i++)
  15. #define rep_0(i,r,l) for(int i = (r);i > (l);i--)
  16. #define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
  17. #define MS0(a) memset(a,0,sizeof(a))
  18. #define MS1(a) memset(a,-1,sizeof(a))
  19. int a[][];
  20. int equ,var;
  21. int x[];
  22. void debug()
  23. {
  24. int i,j;
  25. rep0(i,,equ){
  26. rep1(j,,var)
  27. cout<<a[i][j]<<" ";
  28. cout<<endl;
  29. }
  30. }
  31. int Guass()
  32. {
  33. int i,j,k,free_var = ,row,col;
  34. for(row = ,col = ;row < equ && col < var;row++,col++){
  35. int mx = row;
  36. rep0(j,row+,equ)
  37. if(abs(a[j][col]) > abs(a[mx][col])) mx = j;
  38. if(a[mx][col] == ){
  39. row--; // 行不变;
  40. free_var++;
  41. continue;
  42. }
  43. if(mx != row)
  44. rep1(k,col,var)
  45. swap(a[row][k],a[mx][k]);
  46. rep0(j,row+,equ){
  47. if(a[j][col]){ //第j盏灯也会对第i盏灯产生影响
  48. rep1(k,col,var)
  49. a[j][k] ^= a[row][k];
  50. }
  51. }
  52. }
  53. //debug();
  54. for(;row < equ;row++)if(a[row][var] != ) return -; //无解;
  55. if(free_var != ) return free_var;
  56. rep_1(i,var-,){ //求解的变量的个数,并不是方程的个数;
  57. x[i] = a[i][var];
  58. rep0(j,i+,equ)
  59. x[i] ^= (a[i][j] && x[j]); //第j个灯会影响到第i盏灯,同时第j盏灯也会亮。
  60. }
  61. return ;
  62. }
  63. void init()
  64. {
  65. int i,j,k,n;
  66. MS0(a);MS0(x);
  67. scanf("%d",&n);
  68. equ = var = n;
  69. int x,l,r;
  70. rep0(i,,n) scanf("%d",&a[i][n]);
  71. rep0(i,,n) scanf("%d",&x),a[i][n] ^= x;
  72. rep0(i,,n) a[i][i] = ; //没有关联要格外赋值;
  73. while(scanf("%d %d",&l,&r) == && l+r){
  74. a[r-][l-] = ;
  75. }
  76. }
  77. int main()
  78. {
  79. int T,kase = ,i;
  80. cin>>T;
  81. while(T--){
  82. init();
  83. int ret = Guass();
  84. if(ret == -) puts("Oh,it's impossible~!!");
  85. else printf("%d\n",<<ret);
  86. }
  87. return ;
  88. }

poj 1830 开关问题的更多相关文章

  1. POJ 1830 开关问题(高斯消元)题解

    思路:乍一看好像和线性代数没什么关系.我们用一个数组B表示第i个位置的灯变了没有,然后假设我用u[i] = 1表示动开关i,mp[i][j] = 1表示动了i之后j也会跟着动,那么第i个开关的最终状态 ...

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

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

  3. POJ 1830 开关问题(高斯消元求解的情况)

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

  4. POJ 1830 开关问题 高斯消元,自由变量个数

    http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...

  5. POJ 1830 开关问题(Gauss 消元)

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

  6. POJ 1830 开关问题 (高斯消元)

    题目链接 题意:中文题,和上篇博客POJ 1222是一类题. 题解:如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择. 代码: #include <iostream> ...

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

    题目链接 Solutin: 将每个开关使用的情况当成未知数,如果开关i能影响到开关j,那么系数矩阵A[j][i]的系数为1. 每个开关增广矩阵的值是开关k的初状态异或开关k的目标状态,这个应该很容易想 ...

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

    和上两题一样 Input 输入第一行有一个数K,表示以下有K组测试数据. 每组测试数据的格式如下: 第一行 一个数N(0 < N < 29) 第二行 N个0或者1的数,表示开始时N个开关状 ...

  9. POJ.1830.开关问题(高斯消元 异或方程组)

    题目链接 显然我们需要使每个i满足\[( ∑_{j} X[j]*A[i][j] ) mod\ 2 = B[i]\] 求这个方程自由元Xi的个数ans,那么方案数便是\(2^{ans}\) %2可以用^ ...

随机推荐

  1. sql时间段算法

    需求:领导要求写时间段算法,格式如下 :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: 一小时制 :-: :-: :-: ...

  2. 通过代码设置button中文字的对齐方式

    // button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = U ...

  3. Flume简介与使用(三)——Kafka Sink消费数据之Kafka安装

    前面已经介绍了如何利用Thrift Source生产数据,今天介绍如何用Kafka Sink消费数据. 其实之前已经在Flume配置文件里设置了用Kafka Sink消费数据 agent1.sinks ...

  4. [转]为什么python标准库没有实现链表

    实际上刚开始学习一些高级语言的时候我也有同样的疑问,而且即使有链表对应物的语言,链表常常也很少被实际使用.如果是在国外听数据结构的课,老师一般会警告你这只是一个理论概念,实际应用应该实际考察,在通常情 ...

  5. 关于Git远程版本库

    Git作为分布式版本库控制系统,每个人都是本地版本库的主人,可以在本地的版本库中随心所欲的创建分支和里程碑. 当需要多人协作时,问题就出现了: 1.如何避免因为用户把所有的本地分支都推送到了共享版本库 ...

  6. [转载]Ubuntu 14.04设置固定ip

    参考链接: ubuntu14.04设置静态ip Ubuntu10.10的网络配置 (总结的比较好些) 由于我的虚拟机中的Ubuntu 14.04中,只安装了一个gitlab,gitlab中配置了固定i ...

  7. .Net 动态代理,AOP

    .Net 动态代理,AOP 直接上代码了. /***************************************** * author:jinshuai * * E-mail:redfox ...

  8. 也谈一下Activiti工作流节点的自由跳转

    最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动新节点之后加载 ...

  9. asp图片化电话号码,避免蜘蛛之类爬走用户隐私

    作用:将页面中的电话号码生成图片格式.挺多的分类信息类网站使用这个功能.不用真正的生成图片.原理类似验证码,挺不错的. <% Call Com_CreatValidCode(Request.Qu ...

  10. 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用

        一.数据读取器对象SqlDataReader的使用      如何执行有查询结果集的select语句. 1.SqlDataReader对象的作用:当包含select语句的SqlCommad对象 ...