POJ 1830|开关问题|高斯消元|异或方程组
2016-04-22 17:10
309 查看
自由元有两种取值而且相互不影响,乘法定理可得
每组测试数据的格式如下:
第一行 一个数N(0 < N < 29)
第二行 N个0或者1的数,表示开始时N个开关状态。
第三行 N个0或者1的数,表示操作结束后N个开关的状态。
接下来 每行两个数I J,表示如果操作第 I 个开关,第J个开关的状态也会变化。每组数据以 0 0 结束。
一共以下四种方法:
操作开关1
操作开关2
操作开关3
操作开关1、2、3 (不记顺序)
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define FOR(i,j,k) for(i=j;i<=k;++i) #define rep(i,j,k) for(i=j;i<k;++i) const int dx[] = {-1, 1, 0, 0}; const int dy[] = {0, 0, -1, 1}; const int N = 32; int f , s , e , ele ; int gauss(int n) { int i, j, k, ans = 0; rep(i,0,n) { rep(k,i,n) if (f[k][i]) break; if (!f[k][i]) { ele[ans++] = i; continue; } FOR(j,0,n) swap(f[i][j],f[k][j]); rep(j,0,n) if (i != j && f[j][i]) FOR(k,0,n) f[j][k] ^= f[i][k]; } rep(k,0,ans) if (f[ele[k]] ) return -1; return ans; } int main() { #define id(i,j) (i*6+j) int i, j, k, n, a, b, kase = 0, t; scanf("%d", &t); while (t--) { memset(f, 0, sizeof f); scanf("%d", &n); rep(i,0,n) scanf("%d", &s[i]), f[i][i] = 1; rep(i,0,n) scanf("%d", &e[i]), f[i] = s[i] ^ e[i]; while (scanf("%d%d", &a, &b), a && b) f[--b][--a] = 1; int ans = gauss(n); if (ans == -1) puts("Oh,it's impossible~!!"); else printf("%d\n", 1 << ans); } return 0; }
开关问题
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
LIANGLIANG@POJ相关文章推荐
- UICollectionView详解
- 一.Linux系统:用户及文件权限管理
- 官方下载地址收藏
- CentOS6.6-64下rpm方式mysql-5.7.12安装实录
- spring mvc 检查添加的某个字段是否在数据库里已经存在
- CentOS安装java环境(jdk+tomcat+mysql)
- CTF杂项之隐写术、Crypto
- Python中pip版本升级error:You are using pip version 7.1.2, however version 8.1.1 is available.
- 典型用户与到场景分析
- CSS3学习之radial-gradient(径向渐变)
- niginx相关命令及代理配置
- [置顶] mac下IDEA配置Spring框架+mybatis+maven配置管理的web项目过程详解
- Android移动端IM开发之应用层实现TCP长连接多路复用
- popen调用与命令行调用不一致的问题
- ListView不会填充完整个界面,想在下方继续添加控件的方法
- 【BZOJ1133】[POI2009]Kon【DP】
- [Drools]JAVA规则引擎 -- Drools
- iOS [UIApplcation sharedApplication].keyWindow.bounds 值为全0
- 依赖倒置原则(Dependence Inversion Principle)
- 面试官这样,面试就有戏了!