POJ1830 开关问题
来源:互联网 发布:crossover mac破解 编辑:程序博客网 时间:2024/05/29 09:46
中文题目,就不说题目大意了
解题思路:
由于对于每一个开关最多改变一次,那么对于每一个开关,只有改变与不改变两种操作,设改变操作为1,不改变操作为0,那么对开关的操作可以用一个n维向量
我们需要知道初始状态经过某次操作之后的状态,并拿它与目标状态比较。我们知道,对于开关
#include<iostream>#include<cmath>#include<algorithm>#include<cstring>using namespace std;int ab[50][50], st[50], en[50];inline int gauss(int n){ int i = 0, j = 0, k; while (j < n) { int id = i; for (k = i + 1; k < n; k++) if (abs(ab[k][j]) > abs(ab[id][j])) id = k; if (id != i) { for (k = j; k <= n; k++) swap(ab[i][k], ab[id][k]); } if (ab[i][j] == 0) { j++; continue; } for (k = i + 1; k < n; k++) { if (ab[k][j] == 0) continue; for (int l = j; l <= n; l++) ab[k][l] = ab[k][l] ^ ab[i][l]; } i++, j++; } for (int k = i; k < n; k++) if (ab[k][n] != 0) return -1; return 1 << (n - i);}int main(){ int T; cin >> T; while (T--) { int n; cin >> n; for (int i = 0; i < n; i++) cin >> st[i]; for (int i = 0; i < n; i++) cin >> en[i]; memset(ab, 0, sizeof(ab)); for (int i = 0; i < n; i++) ab[i][i] = 1, ab[i][n] = st[i] ^ en[i]; int I, J; cin >> I >> J; while (I) { ab[J - 1][I - 1] = 1; cin >> I >> J; } int ans = gauss(n); if (ans == -1) cout << "Oh,it's impossible~!!\n"; else cout << ans << endl; } return 0;}
0 0
- poj1830 开关问题 高斯消元
- POJ1830--开关问题
- POJ1830 开关问题【高斯消元法】
- POJ1830 开关问题 高斯消元
- POJ1830 开关问题【 高斯消元】
- POJ1830 开关问题
- POJ1830开关问题-高斯消元
- [poj1830]: 开关问题
- poj1830 开关问题
- poj1830 开关问题(gauss)
- [POJ1830]开关问题(高斯消元)
- poj1830--开关问题(高斯消元问题1)
- 【POJ1830】开关问题 高斯消元求自由元
- 深度优先算法解决POJ1830开关问题
- POJ1830开关问题——gauss消元
- poj1830 高斯消元[3](经典的开关问题)
- poj1830
- poj1830
- Java中equals和==的区别
- Spring 事务配置
- jquery中ajax处理跨域的三大方式
- HDU 3586 Information Disturbing (枚举+树形DP)
- c++数据类型各占多少字节
- POJ1830 开关问题
- WiFi简介
- lvs、haproxy、nginx 负载均衡的比较分析
- JavaScript encode
- HashMap源码阅读
- Activity中onNewIntent的使用
- bzoj1085
- mysql 建立索引
- linux下文件写入模式