高斯消元处理无解|多解情况 poj1830
高斯消元结束后,若存在系数为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的更多相关文章
- 高斯消元与期望DP
高斯消元可以解决一系列DP序混乱的无向图上(期望)DP DP序 DP序是一道DP的所有状态的一个排列,使状态x所需的所有前置状态都位于状态x前: (通俗的说,在一个状态转移方程中‘=’左侧的状态应该在 ...
- 单(single):换根dp,表达式分析,高斯消元
虽说这题看大家都改得好快啊,但是为什么我感觉这题挺难.(我好菜啊) 所以不管怎么说那群切掉这题的大佬是不会看这篇博客的所以我要开始自嗨了. 这题,明显是树dp啊.只不过出题人想看你发疯,询问二合一了而 ...
- UVALive - 6185 Find the Outlier暴力填表+高斯消元+卡eps
https://cn.vjudge.net/problem/UVALive-6185 我真的是服了orz eps 1e5,1e6过不了 开1e2 1e1都能过 题意:给你一个d阶多项式f的f(0),f ...
- 【BZOJ 4171】 4171: Rhl的游戏 (高斯消元)
4171: Rhl的游戏 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 74 Solved: 33[Submit][Status][Discuss] ...
- ACM学习历程—UESTC 1219 Ba Gua Zhen(dfs && 独立回路 && xor高斯消元)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1219 题目大意是给了一张图,然后要求一个点通过路径回到这个点,使得xor和最大. 这是CCPC南阳站的一道题 ...
- poj1753(高斯消元解mod2方程组)
题目链接:http://poj.org/problem?id=1753 题意:一个 4*4 的棋盘,初始时上面放满了黑色或白色的棋子.对 (i, j) 位置进行一次操作后 (i, j), (i + 1 ...
- poj2947(高斯消元解同模方程组)
题目链接:http://poj.org/problem?id=2947 题意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下: p start enda1, a2......ap (1< ...
- poj1222(枚举or高斯消元解mod2方程组)
题目链接: http://poj.org/problem?id=1222 题意: 有一个 5 * 6 的初始矩阵, 1 表示一个亮灯泡, 0 表示一个不亮的灯泡. 对 (i, j) 位置进行一次操作则 ...
- POJ 2947-Widget Factory(高斯消元解同余方程式)
题目地址:id=2947">POJ 2947 题意:N种物品.M条记录,接写来M行,每行有K.Start,End,表述从星期Start到星期End,做了K件物品.接下来的K个数为物品的 ...
随机推荐
- Exception:两个类具有相同的 XML 类型名称,请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称
具体报错: 找到报错的类: 对XmlType重新命名(最简单粗暴的方法):
- MySql cmd下的学习笔记 —— 有关修饰器的知识(trigger)
关于触发器的理解: 进行数据库应用软件的开发时,有时我们碰到表的某些数据的改变时,希望同时 引起其他相关数据改变的需求,利用触发器就能满足这样的需求. 触发器能在表中的某些特定数据变化时自动完成某些查 ...
- linux下获取微秒级精度的时间【转】
转自:https://blog.csdn.net/u011857683/article/details/81320052 使用C语言在linux环境下获得微秒级时间 1. 数据结构 int getti ...
- Json的序列化与反序列化以及乱入的k_BackingField
0.Newtonsoft.json 最简单的最强大的基于c#的json解析库是Newtonsoft.json 在NuGet程序包管理器中在线搜索“json”,选择JSon.Net,并安装. 使用到 ...
- CORS(Cross-origin resource sharing) “跨域资源共享”
CORS与JSONP的比较 在出现CORS标准之前, 我们还只能通过jsonp的形式去向“跨源”服务器去发送 XMLHttpRequest 请求,这种方式吃力不讨好,在请求方与接收方都需要做处理,而且 ...
- Web.config设置system.webServer
一般情况在iis部署web网站都非常顺利,但是遇到复杂环境,或者被配置过又正在使用的时候,就束手无策了, 因为对IIS和Web.config不熟悉,不知其中要害,导致浪费一天甚至更久的时间去处理一个可 ...
- Ubuntu14下nginx服务器链接PHP
报错:nginx下无法打开php,报错[error] 5040#0: *1 connect() failed (111: Connection ref ... server { listen ; #l ...
- hibernate框架学习之数据类型
- 洛谷 P4948 拉格朗日多项式插值(杜老师板子)
https://www.luogu.org/problemnew/show/P4948 这篇博客主要目的是存一下的dls的神奇板子,本来应该是推公式或者二分做的 但是dls的插值板子直接写好了这个特殊 ...
- SPOJ - DQUERY D-query 主席树
题意; 给一个数列$\{ a_i\}$ 一些询问$(l_i,r_i)$ 问你$[l,r]$有多少个不同元素 题解: 其实本质思路和离线化处理询问的线段树/树状数组写法差不多,对区间$[x,r]$来说, ...