Language:
Default
开关问题
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 6656   Accepted: 2541

Description

有N个同样的开关。每一个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其它的与此开关相关联的开关也会对应地发生变化,即这些相联系的开关的状态假设原来为开就变为关,假设为关就变为开。你的目标是经过若干次开关操作后使得最后N个开关达到一个特定的状态。对于随意一个开关,最多仅仅能进行一次开关操作。你的任务是,计算有多少种能够达到指定状态的方法。(不计开关操作的顺序)

Input

输入第一行有一个数K,表示下面有K组測试数据。

每组測试数据的格式例如以下: 

第一行 一个数N(0 < N < 29) 

第二行 N个0或者1的数。表示開始时N个开关状态。 

第三行 N个0或者1的数。表示操作结束后N个开关的状态。

接下来 每行两个数I J,表示假设操作第 I 个开关,第J个开关的状态也会变化。每组数据以 0 0 结束。

Output

假设有可行方法,输出总数,否则输出“Oh,it's impossible~!!” 不包含引號

Sample Input

2
3
0 0 0
1 1 1
1 2
1 3
2 1
2 3
3 1
3 2
0 0
3
0 0 0
1 0 1
1 2
2 1
0 0

Sample Output

4
Oh,it's impossible~!!

Hint

第一组数据的说明: 

一共下面四种方法: 

操作开关1 

操作开关2 

操作开关3 

操作开关1、2、3 (不记顺序) 

Source


中文题~不翻译。

解题思路:主要是始末矩阵的处理方法。能够让A+X=B 两边同一时候异或A就能够了。这样就能简单得到增广矩阵。

a[i][j]是j灯控制i灯。

记得把a[i][i]的情况加上,差点忽略这点,自己当然能够控制自己啊。

AC代码:

#include <stdio.h>
#include <math.h>
#include <vector>
#include <queue>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define MAXN 31 using namespace std; int equ,var;
int a[MAXN][MAXN]; int Gauss()
{
int col=0;
int k,max_r;
for(k=0;col<var&&k<equ;k++,col++){
max_r=k;
for(int i=k+1;i<equ;i++)
if(abs(a[i][col])>abs(a[max_r][col])) max_r=i;
if(max_r!=k){
for(int i=col;i<=var;i++)
swap(a[k][i],a[max_r][i]);
}
if(!a[k][col]){
k--;
continue;
}
for(int i=k+1;i<equ;i++)
if(a[i][col])
for(int j=col;j<=var;j++)
a[i][j]^=a[k][j];
}
for(int i=k;i<equ;i++)
if(a[i][col]) return -1;
return var-k;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
memset(a,0,sizeof(a));
scanf("%d",&equ);
var=equ;
int b;
for(int i=0;i<equ;i++){
//a[i][i]=1;
scanf("%d",&b);
a[i][var]=b;
}
for(int i=0;i<equ;i++){
scanf("%d",&b);
a[i][var]^=b;
}
int I,J;
while(scanf("%d%d",&I,&J),I!=0||J!=0){
a[J-1][I-1]=1;
}
for(int i=0;i<equ;i++) a[i][i]=1;
int res=Gauss();
if(res<0)printf("Oh,it's impossible~!!\n");
else printf("%d\n",1<<res);
}
return 0;
}

POJ 开关问题 1830【高斯消元求矩阵的秩】的更多相关文章

  1. Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

    题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是全然平方数 求有多少种方案 思路:每一个数分解因子 每隔 ...

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

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

  3. 【POJ】1830 开关问题(高斯消元)

    http://poj.org/problem?id=1830 高斯消元无解的条件:当存在非法的左式=0而右式不等于0的情况,即为非法.这个可以在消元后,对没有使用过的方程验证是否右式不等于0(此时因为 ...

  4. HDU4870_Rating_双号从零单排_高斯消元求期望

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...

  5. HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)

    网络预选赛的题目……比赛的时候没有做上,确实是没啥思路,只知道肯定是整数分解,然后乘起来素数的幂肯定是偶数,然后就不知道该怎么办了… 最后题目要求输出方案数,首先根据题目应该能写出如下齐次方程(从别人 ...

  6. 【BZOJ2137】submultiple 高斯消元求伯努利数

    [BZOJ2137]submultiple Description 设函数g(N)表示N的约数个数.现在给出一个数M,求出所有M的约数x的g(x)的K次方和. Input 第一行输入N,K.N表示M由 ...

  7. SPOJ HIGH(生成树计数,高斯消元求行列式)

    HIGH - Highways no tags  In some countries building highways takes a lot of time... Maybe that's bec ...

  8. 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基

    题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...

  9. 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基

    题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...

随机推荐

  1. ios 上传视频或图片

    关于iOS如何实现视频和图片的上传, 我们先理清下思路 思路: #1. 如何获取图片? #2. 如何获取视频? #3. 如何把图片存到缓存路径中? #4. 如何把视频存到缓存路径中? #5. 如何上传 ...

  2. Nature Reserve

    Nature Reserve time limit per test:2 seconds memory limit per test:256 megabytes input:standard inpu ...

  3. cf 613E - Puzzle Lover

    Description 一个\(2*n\)的方格矩阵,每个格子里有一个字符 给定一个长度为\(m\)的字符串\(s\) 求在方格矩阵中,有多少种走法能走出字符串\(s\) 一种合法的走法定义为:从任意 ...

  4. 【BZOJ4481&JSOI2015】非诚勿扰(数学期望)

    听说JSOI有版权问题就不放图了 如果前面的文章里的图需要删掉请通知我 题意:有一些女的要挑一些男的,挑中的几率均为p.一个男的可以无限次被挑中.若女a选中男b,女c选中男d,a<c,b> ...

  5. 【NOIP2009】最优贸易

    描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通 ...

  6. mongoDB最新版安装

    转载自:http://www.higis.org/2012/04/25/ubuntu-install-mongodb/ ubuntu上安装mongodb本可以直接通过sudo apt-get inst ...

  7. css sticky footer 布局 手机端

    什么是css sticky footer 布局? 通常在手机端写页面 会遇到如下情况 页面长度很短不足以撑起一屏,此时希望页脚在页面的底部 而当页面超过一屏时候,页脚会在文章的底部 ,网上有许多办法, ...

  8. Educational Codeforces Round 37 A B C D E F

    A. water the garden Code #include <bits/stdc++.h> #define maxn 210 using namespace std; typede ...

  9. hdu 5950 Recursive sequence 递推式 矩阵快速幂

    题目链接 题意 给定\(c_0,c_1,求c_n(c_0,c_1,n\lt 2^{31})\),递推公式为 \[c_i=c_{i-1}+2c_{i-2}+i^4\] 思路 参考 将递推式改写\[\be ...

  10. eclipse集成JBPM

    JBPM4.4是一款运用的比较广泛的工作流开发框架,最近参与的BSS项目里面也有用到了JBPM4.4.自己在已经搭建的框架下使用,但更详细的理解并没有.因此借此机会学习一下. 学习版本为:JBPM为4 ...