POJ 1830.开关问题(高斯消元)
Solutin:
将每个开关使用的情况当成未知数,如果开关i能影响到开关j,那么系数矩阵A[j][i]的系数为1。
每个开关增广矩阵的值是开关k的初状态异或开关k的目标状态,这个应该很容易想到。
方程都列好了,直接消元就好了。
code
/*
解异或方程组
*/
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = ; int prim[MAXN];
int A[MAXN][MAXN]; int Gauss (int n, int m) {
int col = , row = , tem, k = ;
for (; col < m && row < n; ++col) {
for (tem = row; tem < n && A[tem][col] == ; ++tem);
if (tem == n) continue;
if (tem != row) {
for (int i = ; i <= n; ++i)
swap (A[row][i], A[tem][i]);
}
for (int i = row + ; i <= n; ++i) {
if (A[i][col])
for (int j = col; j <= m; ++j)
A[i][j] ^= A[row][j];
}
row++;
}
for (int i = row; i < n; ++i)
if (A[i][n] != ) return -;
return m - row;
}
int n, m, cs, S, T;
int main() {
ios::sync_with_stdio ();
cin >> cs;
while (cs--) {
cin >> n;
S = T = ;
for (int i = , x; i < n; ++i) {
cin >> x;
if (x) S |= ( << i);
}
for (int i = , x; i < n; ++i) {
cin >> x;
if (x) T |= ( << i);
}
T ^= S;
memset (A, , sizeof A);
for (int i = ; i < n; ++i){
if (T & ( << i) ) A[i][n] = ;
A[i][i]=;
}
int x, y;
while (cin >> x >> y, x && y) A[y - ][x - ] = ;
int p = Gauss (n, n);
if (p < ) cout << "Oh,it's impossible~!!" << endl;
else
cout << ( << p) << endl;
}
}
POJ 1830.开关问题(高斯消元)的更多相关文章
- POJ 1830 开关问题 高斯消元,自由变量个数
http://poj.org/problem?id=1830 如果开关s1操作一次,则会有s1(记住自己也会变).和s1连接的开关都会做一次操作. 那么设矩阵a[i][j]表示按下了开关j,开关i会被 ...
- POJ 1830 开关问题 (高斯消元)
题目链接 题意:中文题,和上篇博客POJ 1222是一类题. 题解:如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择. 代码: #include <iostream> ...
- 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可以用^ ...
- POJ 3185 The Water Bowls 【一维开关问题 高斯消元】
任意门:http://poj.org/problem?id=3185 The Water Bowls Time Limit: 1000MS Memory Limit: 65536K Total S ...
- POJ - 1681: Painter's Problem (开关问题-高斯消元)
pro:开关问题,同上一题. 不过只要求输出最小的操作步数,无法完成输出“inf” sol:高斯消元的解对应的一组合法的最小操作步数. #include<bits/stdc++.h> #d ...
- POJ - 1222: EXTENDED LIGHTS OUT (开关问题-高斯消元)
pro:给定5*6的灯的状态,如果我们按下一个灯的开关,它和周围4个都会改变状态.求一种合法状态,使得终状态全为关闭: sol:模2意义下的高斯消元. 终于自己手打了一个初级板子. #include& ...
- A - The Water Bowls POJ - 3185 (bfs||高斯消元)
题目链接:https://vjudge.net/contest/276374#problem/A 题目大意:给你20个杯子,每一次操作,假设当前是对第i个位置进行操作,那么第i个位置,第i+1个位置, ...
- POJ 1166 The Clocks 高斯消元 + exgcd(纯属瞎搞)
依据题意可构造出方程组.方程组的每一个方程格式均为:C1*x1 + C2*x2 + ...... + C9*x9 = sum + 4*ki; 高斯消元构造上三角矩阵,以最后一个一行为例: C*x9 = ...
- POJ 2065 SETI(高斯消元)
题目链接:http://poj.org/problem?id=2065 题意:给出一个字符串S[1,n],字母a-z代表1到26,*代表0.我们用数组C[i]表示S[i]经过该变换得到的数字.给出一个 ...
随机推荐
- Azure SQL 数据库的灵活缩放预览版简介
Eron Kelly SQL Server 产品管理部门产品市场营销总经理 几天前,我们宣布了发布 Azure SQL 数据库的灵活缩放公共预览版.新增的灵活缩放功能通过简化开发和管理,简化了扩展和缩 ...
- WebClient的超时问题及解决
WebClient的超时问题及解决 转自:http://blog.163.com/xiaozhi797@126/blog/static/62440288201112245345838/ Webcl ...
- StringBuilder字符串缓冲区
JDK1.5出现StringBuiler:构造一个其中不带字符的字符串生成器,初始容量为 16 个字符.该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候( ...
- OpenSource
SugarCRM 客户关系管理系统(CRM).SugarCRM开源版是一款完全开放源代码的商业开源软件 OPENFILER 基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接 ...
- PHP——四种基本排序算法
分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析 ...
- span元素之间的间距
去除inline-block元素间间距的N种方法- zhangxinxu http://www.zhangxinxu.com/wordpress/2012/04/inline-block-space- ...
- winform 分页 分类: WinForm 2014-05-16 15:30 257人阅读 评论(0) 收藏
说明:(1)如果对分页的感兴趣的话,可以看一下我传的存储过程("SQL 存储过程 分页") (2)分页,第一页.上一页,下一页.最后一页只调用点击(cl ...
- 在octopress中gist tab不能正确的插入gist代码
今天尝试用Octopress的gits tab插件来把gist插入到博客中,但是发现没有插入成功,调用rake generate报如下的错误: Gist replied with 404 for ht ...
- Eclipse(Myeclipse)安装GoogleGWT
1,下载gpe http://code.google.com/p/googleappengine/并安装. 2,下载gwt http://code.google.com/intl/zh-CN/webt ...
- winform设置DataGridView样式 (蓝色)
本文转载:http://www.cnblogs.com/hailexuexi/archive/2012/04/23/2466398.html 代码: #region DataGridVeiw Styl ...