poj 1830 开关问题
题意:给n(0 < n < 29)开关的初始和最终状态(01表示),以及开关之间的关联关系(关联关系是单向的输入a b表示a->b),问有几种方式得到最终的状态。否则输出字符字面值。
1.与poj 1222的区别:关联为单向,需要预处理出每个开关对自己的关联(开始在输入关联关系中处理自身的关联,WA了两发),操作的矩阵(变换的矩阵)为初始状态XOR最终状态;
2.处理完之后判断系数全为0的最终结果a[k][var]是否为0来判断是否无解。同时如有n个自由变元,由于每个变元只有两种状态,所以只有2^n个方案。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<string.h>
- #include<algorithm>
- #include<map>
- #include<queue>
- #include<vector>
- #include<cmath>
- #include<stdlib.h>
- #include<time.h>
- using namespace std;
- #define rep0(i,l,r) for(int i = (l);i < (r);i++)
- #define rep1(i,l,r) for(int i = (l);i <= (r);i++)
- #define rep_0(i,r,l) for(int i = (r);i > (l);i--)
- #define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
- #define MS0(a) memset(a,0,sizeof(a))
- #define MS1(a) memset(a,-1,sizeof(a))
- int a[][];
- int equ,var;
- int x[];
- void debug()
- {
- int i,j;
- rep0(i,,equ){
- rep1(j,,var)
- cout<<a[i][j]<<" ";
- cout<<endl;
- }
- }
- int Guass()
- {
- int i,j,k,free_var = ,row,col;
- for(row = ,col = ;row < equ && col < var;row++,col++){
- int mx = row;
- rep0(j,row+,equ)
- if(abs(a[j][col]) > abs(a[mx][col])) mx = j;
- if(a[mx][col] == ){
- row--; // 行不变;
- free_var++;
- continue;
- }
- if(mx != row)
- rep1(k,col,var)
- swap(a[row][k],a[mx][k]);
- rep0(j,row+,equ){
- if(a[j][col]){ //第j盏灯也会对第i盏灯产生影响
- rep1(k,col,var)
- a[j][k] ^= a[row][k];
- }
- }
- }
- //debug();
- for(;row < equ;row++)if(a[row][var] != ) return -; //无解;
- if(free_var != ) return free_var;
- rep_1(i,var-,){ //求解的变量的个数,并不是方程的个数;
- x[i] = a[i][var];
- rep0(j,i+,equ)
- x[i] ^= (a[i][j] && x[j]); //第j个灯会影响到第i盏灯,同时第j盏灯也会亮。
- }
- return ;
- }
- void init()
- {
- int i,j,k,n;
- MS0(a);MS0(x);
- scanf("%d",&n);
- equ = var = n;
- int x,l,r;
- rep0(i,,n) scanf("%d",&a[i][n]);
- rep0(i,,n) scanf("%d",&x),a[i][n] ^= x;
- rep0(i,,n) a[i][i] = ; //没有关联要格外赋值;
- while(scanf("%d %d",&l,&r) == && l+r){
- a[r-][l-] = ;
- }
- }
- int main()
- {
- int T,kase = ,i;
- cin>>T;
- while(T--){
- init();
- int ret = Guass();
- if(ret == -) puts("Oh,it's impossible~!!");
- else printf("%d\n",<<ret);
- }
- return ;
- }
poj 1830 开关问题的更多相关文章
- POJ 1830 开关问题(高斯消元)题解
思路:乍一看好像和线性代数没什么关系.我们用一个数组B表示第i个位置的灯变了没有,然后假设我用u[i] = 1表示动开关i,mp[i][j] = 1表示动了i之后j也会跟着动,那么第i个开关的最终状态 ...
- POJ 1830 开关问题 【01矩阵 高斯消元】
任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...
- POJ 1830 开关问题(高斯消元求解的情况)
开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8714 Accepted: 3424 Description ...
- POJ 1830 开关问题 高斯消元,自由变量个数
http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...
- POJ 1830 开关问题(Gauss 消元)
开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 7726 Accepted: 3032 Description ...
- POJ 1830 开关问题 (高斯消元)
题目链接 题意:中文题,和上篇博客POJ 1222是一类题. 题解:如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择. 代码: #include <iostream> ...
- POJ 1830.开关问题(高斯消元)
题目链接 Solutin: 将每个开关使用的情况当成未知数,如果开关i能影响到开关j,那么系数矩阵A[j][i]的系数为1. 每个开关增广矩阵的值是开关k的初状态异或开关k的目标状态,这个应该很容易想 ...
- POJ 1830 开关问题 [高斯消元XOR]
和上两题一样 Input 输入第一行有一个数K,表示以下有K组测试数据. 每组测试数据的格式如下: 第一行 一个数N(0 < N < 29) 第二行 N个0或者1的数,表示开始时N个开关状 ...
- POJ.1830.开关问题(高斯消元 异或方程组)
题目链接 显然我们需要使每个i满足\[( ∑_{j} X[j]*A[i][j] ) mod\ 2 = B[i]\] 求这个方程自由元Xi的个数ans,那么方案数便是\(2^{ans}\) %2可以用^ ...
随机推荐
- sql时间段算法
需求:领导要求写时间段算法,格式如下 :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: :-: 一小时制 :-: :-: :-: ...
- 通过代码设置button中文字的对齐方式
// button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效 button.contentHorizontalAlignment = U ...
- Flume简介与使用(三)——Kafka Sink消费数据之Kafka安装
前面已经介绍了如何利用Thrift Source生产数据,今天介绍如何用Kafka Sink消费数据. 其实之前已经在Flume配置文件里设置了用Kafka Sink消费数据 agent1.sinks ...
- [转]为什么python标准库没有实现链表
实际上刚开始学习一些高级语言的时候我也有同样的疑问,而且即使有链表对应物的语言,链表常常也很少被实际使用.如果是在国外听数据结构的课,老师一般会警告你这只是一个理论概念,实际应用应该实际考察,在通常情 ...
- 关于Git远程版本库
Git作为分布式版本库控制系统,每个人都是本地版本库的主人,可以在本地的版本库中随心所欲的创建分支和里程碑. 当需要多人协作时,问题就出现了: 1.如何避免因为用户把所有的本地分支都推送到了共享版本库 ...
- [转载]Ubuntu 14.04设置固定ip
参考链接: ubuntu14.04设置静态ip Ubuntu10.10的网络配置 (总结的比较好些) 由于我的虚拟机中的Ubuntu 14.04中,只安装了一个gitlab,gitlab中配置了固定i ...
- .Net 动态代理,AOP
.Net 动态代理,AOP 直接上代码了. /***************************************** * author:jinshuai * * E-mail:redfox ...
- 也谈一下Activiti工作流节点的自由跳转
最近在搞openwebflow的工作流节点自由跳转功能,在网上看了一些资料,感觉不是很好,总结原因如下: 直接手动调用SqlSession的操作,感觉会漏掉一些重要的初始化操作(如:启动新节点之后加载 ...
- asp图片化电话号码,避免蜘蛛之类爬走用户隐私
作用:将页面中的电话号码生成图片格式.挺多的分类信息类网站使用这个功能.不用真正的生成图片.原理类似验证码,挺不错的. <% Call Com_CreatValidCode(Request.Qu ...
- 数据读取器对象SqlDataReader与数据适配器对象SqlDataAdapter的使用
一.数据读取器对象SqlDataReader的使用 如何执行有查询结果集的select语句. 1.SqlDataReader对象的作用:当包含select语句的SqlCommad对象 ...