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

sol:即求自由元的个数,答案是pow(2,自由元)。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int a[][],ans[];
int Guass(int N)
{
int res=;
rep(i,,N-){
int mark=i;
rep(j,i+,N-) if(abs(a[j][i])>abs(a[mark][i])) mark=j;
if(mark!=i) rep(j,,N) swap(a[i][j],a[mark][j]);
if(!a[i][i]){ res++; continue;} //自由元
rep(j,i+,N){
if(!a[j][i]) continue;
rep(k,i,N){
a[j][k]^=a[i][k];
}
}
}
for(int i=N-;i>=;i--){
if(!a[i][i]&&a[i][N]) return -;//无解
ans[i]=a[i][N]&a[i][i];
rep(j,,i-) a[j][N]^=(a[j][i]&ans[i]);
}
return <<res;
}
int s[],t[],res;
int main()
{
int T,N,u,v;
scanf("%d",&T);
while(T--){
memset(a,,sizeof(a));
scanf("%d",&N);
rep(i,,N-) scanf("%d",&s[i]);
rep(i,,N-) scanf("%d",&t[i]);
rep(i,,N-) a[i][N]=s[i]^t[i],a[i][i]=;
while(~scanf("%d%d",&u,&v)&&u+v!=){
a[v-][u-]=; //二者不要写反
}
int res=Guass(N);
if(res==-) puts("Oh,it's impossible~!!");
else printf("%d\n",res);
}
return ;
}

POJ - 1830:开关问题 (开关问题-高斯消元-自由元)的更多相关文章

  1. poj1830开关问题——异或高斯消元

    题目:http://poj.org/problem?id=1830 根据题意,构造出n元方程组: a(1,1)x1 ^ a(1,2)x2 ^ a(1,3)x3 ... a(1,n)xn = st1 ^ ...

  2. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解XOR方程组)

    http://poj.org/problem?id=1222 题意:现在有5*6的开关,1表示亮,0表示灭,按下一个开关后,它上下左右的灯泡会改变亮灭状态,要怎么按使得灯泡全部处于灭状态,输出方案,1 ...

  3. POJ 1222 EXTENDED LIGHTS OUT(高斯消元解异或方程组)

    EXTENDED LIGHTS OUT Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10835   Accepted: 6 ...

  4. POJ 3185 The Water Bowls(高斯消元-枚举变元个数)

    题目链接:http://poj.org/problem?id=3185 题意:20盏灯排成一排.操作第i盏灯的时候,i-1和i+1盏灯的状态均会改变.给定初始状态,问最少操作多少盏灯使得所有灯的状态最 ...

  5. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)

    [题目链接] http://poj.org/problem?id=1222 [题目大意] 给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了 ...

  6. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)题解

    题意:5*6的格子,你翻一个地方,那么这个地方和上下左右的格子都会翻面,要求把所有为1的格子翻成0,输出一个5*6的矩阵,把要翻的赋值1,不翻的0,每个格子只翻1次 思路:poj 1222 高斯消元详 ...

  7. POJ 1681 Painter's Problem(高斯消元+枚举自由变元)

    http://poj.org/problem?id=1681 题意:有一块只有黄白颜色的n*n的板子,每次刷一块格子时,上下左右都会改变颜色,求最少刷几次可以使得全部变成黄色. 思路: 这道题目也就是 ...

  8. 【POJ】2947 Widget Factory(高斯消元)

    http://poj.org/problem?id=2947 各种逗啊..还好1a了.. 题意我就不说了,百度一大把. 转换为mod的方程组,即 (x[1,1]*a[1])+(x[1,2]*a[2]) ...

  9. POJ 1681 Painter's Problem 【高斯消元 二进制枚举】

    任意门:http://poj.org/problem?id=1681 Painter's Problem Time Limit: 1000MS   Memory Limit: 10000K Total ...

  10. poj 1681 Painter&#39;s Problem(高斯消元)

    id=1681">http://poj.org/problem? id=1681 求最少经过的步数使得输入的矩阵全变为y. 思路:高斯消元求出自由变元.然后枚举自由变元,求出最优值. ...

随机推荐

  1. rest-framework基本组件—主要看频率

    添加节流 自定义节流的方法  限制60s内只能访问3次 (1)API文件夹下面新建throttle.py,代码如下: # utils/throttle.py from rest_framework.t ...

  2. Flex 弹性盒基本语法

    网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂 ...

  3. 如何练习打字之用英文写文章 & 如何调养右手之用左手握鼠标

    part1:how to practise your typing via writing a English blog it's easy to write english for chinese. ...

  4. RSA填充模式

    1)RSA_PKCS1_PADDING 填充模式,最常用的模式 输入RSA_size(rsa) – 11输出和modulus一样长 2)RSA_PKCS1_OAEP_PADDINGRSA_size(r ...

  5. Python2.0 与 3.0 的区别

    Python 2.0 =默认编码=ASSIC=不支持中文 Python 3.0 =默认编码=UNICODE=默认支持中文   In summary : Python 2.x is legacy, Py ...

  6. MarkdownPan2 简单使用指南

    markdown 简单使用指南 一级标题 二级标题 三级标题加代码 四级标题 这里是加粗 这里是正文and English 888 这里有正文嵌入代码这种样式 这里是代码块 这种使用的代码块 还有引用 ...

  7. 小飞侠带你精通Python网络编程系列03-Python版本的选择

    1. 目前Python有两个主要版本Python2.X和Python3.X 2. Python2.X最后一个版本是2.7,目前(2018年10月21日)Python3.X最新版本为3.7 3. 很不幸 ...

  8. c++ <stdarg.h> 解决变参问题的宏定义;

    在读程序的过程中遇到的va_list类型不认识,百度得到的.:http://www.cnblogs.com/hanyonglu/archive/2011/05/07/2039916.html (此例子 ...

  9. 12月4日学习爬虫007.使用Urllib模块进行简单网页爬取

    笔记如下: 1.https是http加强版协议(安全协议)http(普通网络通信协议) 爬数据 如果爬https发现和理想中的数据不同,可以改为http 直接去掉s即可 2.使用Urllib爬取简单网 ...

  10. DevExpress ASP.NET Core Controls 2019发展蓝图(No.4)

    本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...