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. 【bzoj3879】SvT 后缀数组+倍增RMQ+单调栈

    题目描述 (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始位置来表示), ...

  2. HDU 4557 非诚勿扰(Treap找后继)

    非诚勿扰 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

  3. 省选算法学习-插头dp

    插头dp?你说的是这个吗? 好吧显然不是...... 所谓插头dp,实际上是“基于连通性的状态压缩dp”的简称,最先出现在cdq的论文里面 本篇博客致力于通过几道小小的例题(大部分都比较浅显)来介绍一 ...

  4. 论S B的自我修养 【2015/10/18更】

    to do list: 1.正则表达式引擎   (done 2.五子棋AI jquery && canvas 游戏 (这个搞定好多好玩的idea可以实现了php 暂时不想玩各种框架吧, ...

  5. leetcode 389 map iterator 的使用

    class Solution { public: char findTheDifference(string s, string t) { map<char,int>Map_Temp; ; ...

  6. webstorm不能使用stylus

    1.https://stackoverflow.com/questions/23583514/webstorm-8-showing-errors-for-a-correct-html-tag 2. & ...

  7. openssl RSA 内存读取密钥

    主要注意一下密钥的格式 #include <openssl/pem.h> #include <openssl/err.h> bool CEncipher::CreatePubK ...

  8. 球形空间产生器sphere(bzoj 1013)

    Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁 ...

  9. [bzoj 1782] [Usaco2010 Feb]slowdown慢慢游

    [bzoj 1782] [Usaco2010 Feb]slowdown慢慢游 Description 每天Farmer John的N头奶牛(1 <= N <= 100000,编号1-N)从 ...

  10. SQL统计,重复字段只算一次

    原文发布时间为:2010-08-07 -- 来源于本人的百度文章 [由搬家工具导入] master数据库为例: COUNT(EXPRESSION)一个字段重复,则只算一次:SELECT COUNT(D ...