高斯消元结束后,若存在系数为0,常数不为0的行,则方程无解

若系数不为0的行有k个,则说明主元有k个,自由元有n-k个,方程多解

/*
给定n个开关的初始状态si,要求将其变成目标状态di
规定:
每个开关最多进行一次操作
给定一组对应关系(i,j),如果操作第i个开关那么第j个开关也会受影响
请问有多少种操作方式
设xi=0|1表示没按/按了第i个开关
系数矩阵A[i][j]表示按第j个开关对第i个开关有影响,A[i][i]=1
那么可以得到方程组
A[i][1]*x1 ^ A[i][2]*x2 ^ ... ^ A[i][n]*xn = si^di
把常数左移可得
A[i][1]*x1 ^ A[i][2]*x2 ^ ... ^ A[i][n]*xn ^ si^di = 0
方程组中的 A[i][j]*xj 代表第j个开关对第i个开关产生的影响,显然只有两个都为1时才会有影响
那么对以上方程组使用高斯消元即可!
可以对A数组进行状态压缩,A[i]表示第i个方程的系数矩阵,共n+1位,其中1-n表示系数,n+1表示常数 由于x的取值只能是0或1
所以有i个自由原,操作方式就有1<<i种
*/
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int A[],n,t,ans;
int main(){
cin>>t;
while(t--){
cin>>n;
//处理第n+1位,即常数
for(int i=;i<=n;i++)cin>>A[i];
for(int i=;i<=n;i++){
int tmp=;
cin>>tmp;
A[i]^=tmp;
}
for(int i=;i<=n;i++) A[i]|=<<i;//处理A[i][i]
int i,j;
while(cin>>i>>j && i)//A[j][i]=1
A[j]|=<<i;
ans=;
//开始高斯消元!
for(int i=;i<=n;i++){
//找到最大的A[i],即主元位最高的a[i]
for(int j=i;j<=n;j++)
if(A[j]>A[i])swap(A[j],A[i]);
//只有i-1个主元
if(A[i]==){ans=<<(n-i+);break;}
//只有常数项不是0
if(A[i]==){ans=;break;}
//把其余方程的A[i]的最高位减去
for(int k=n;k;k--)
if(A[i]>>k & ){//找到A[i]最高位的主元
for(int j=;j<=n;j++)
if(j!=i && (A[j]>>k & ))A[j]^=A[i];
break;
}
}
if(ans==)
puts("Oh,it's impossible~!!");
else cout<<ans<<endl;
}
}

高斯消元处理无解|多解情况 poj1830的更多相关文章

  1. 高斯消元与期望DP

    高斯消元可以解决一系列DP序混乱的无向图上(期望)DP DP序 DP序是一道DP的所有状态的一个排列,使状态x所需的所有前置状态都位于状态x前: (通俗的说,在一个状态转移方程中‘=’左侧的状态应该在 ...

  2. 单(single):换根dp,表达式分析,高斯消元

    虽说这题看大家都改得好快啊,但是为什么我感觉这题挺难.(我好菜啊) 所以不管怎么说那群切掉这题的大佬是不会看这篇博客的所以我要开始自嗨了. 这题,明显是树dp啊.只不过出题人想看你发疯,询问二合一了而 ...

  3. UVALive - 6185 Find the Outlier暴力填表+高斯消元+卡eps

    https://cn.vjudge.net/problem/UVALive-6185 我真的是服了orz eps 1e5,1e6过不了 开1e2 1e1都能过 题意:给你一个d阶多项式f的f(0),f ...

  4. 【BZOJ 4171】 4171: Rhl的游戏 (高斯消元)

    4171: Rhl的游戏 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 74  Solved: 33[Submit][Status][Discuss] ...

  5. ACM学习历程—UESTC 1219 Ba Gua Zhen(dfs && 独立回路 && xor高斯消元)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1219 题目大意是给了一张图,然后要求一个点通过路径回到这个点,使得xor和最大. 这是CCPC南阳站的一道题 ...

  6. poj1753(高斯消元解mod2方程组)

    题目链接:http://poj.org/problem?id=1753 题意:一个 4*4 的棋盘,初始时上面放满了黑色或白色的棋子.对 (i, j) 位置进行一次操作后 (i, j), (i + 1 ...

  7. poj2947(高斯消元解同模方程组)

    题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start enda1, a2......ap (1< ...

  8. poj1222(枚举or高斯消元解mod2方程组)

    题目链接: http://poj.org/problem?id=1222 题意: 有一个 5 * 6 的初始矩阵, 1 表示一个亮灯泡, 0 表示一个不亮的灯泡. 对 (i, j) 位置进行一次操作则 ...

  9. POJ 2947-Widget Factory(高斯消元解同余方程式)

    题目地址:id=2947">POJ 2947 题意:N种物品.M条记录,接写来M行,每行有K.Start,End,表述从星期Start到星期End,做了K件物品.接下来的K个数为物品的 ...

随机推荐

  1. mysql 8.0 ~ 存储和账户

    一 简介:关于存储数据文件的改进二 数据文件:   1合并了存储数据库对象信息的事务性数据字典       1 相关文件等存储引擎层存储元数据文件已消失,只有ibd文件,元数据存储在数据字典表    ...

  2. Tip: JSP开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. JSP+JavaBean模式适合开发业务 ...

  3. drozer的使用介绍

    0x00. 配置adb环境变量 下载地址:http://pan.baidu.com/s/1o8itZtC 密码:9o6j 如何配置android的adb环境变量 http://jingyan.baid ...

  4. 微信小程序-用户拒绝授权使用 wx.openSetting({}) 重新调起授权用户信息

    场景模拟:用户进入微信小程序-程序调出授权 选择拒绝之后,需要用到用户授权才能正常使用的页面,就无法正常使用了. 解决方法:在用户选择拒绝之后,弹窗提示用户 拒绝授权之后无法使用,让用户重新授权(微信 ...

  5. RabbitMQ应用场景

    1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信, ...

  6. CSS函数

    布局时发现CSS居然能进行计算,cale()函数用于动态计算长度值 html,body的height为100%,黑框浮动width为200px,橙框处标准流,由于浮动最初目的是为了实现文字环绕,所以文 ...

  7. [转] Implementing a CNN for Text Classification in TensorFlow

    Github上的一个开源项目,文档讲得极清晰 Github - https://github.com/dennybritz/cnn-text-classification-tf 原文- http:// ...

  8. js知识巩固

    1.数组操作中使用splice和slice进行删除数组的区别! splice会对原数组进行操作,返回的是被删除元素组成的数组,原数组会被进行改变即变成删除后的数组,用于删除列表中的元素,arr.spl ...

  9. apache做反向代理服务器

    apache代理分为正向代理和反向代理: 1 正向代理: 客户端无法直接访问外部的web,需要在客户端所在的网络内架设一台代理服务器,客户端通过代理服务器访问外部的web(需要在客户端的浏览器中设置代 ...

  10. tomcat apr 部署

    背景 这还是为了高并发的事,网上说的天花乱坠的,加了apr怎么怎么好,我加了,扯淡.就是吹牛用.我还是认为,性能问题要考设计逻辑和代码解决,这些都是锦上添花的. 步骤 1 windows 部署简单,虽 ...