POJ1830(异或高斯消元)
2024-10-20 05:20:43
对于某个开关,都有n个选项可能影响它的结果,如果会影响,则系数为1,否则系数为0;最后得到自由元的个数,自由元可选0也可选1.
#include <cstdio>
#include <algorithm>
int T, n, a[30], x, y;
int gauss() {
for (int i = 1; i <= n; i++) {
//列主
for (int j = i + 1; j <= n; j++) {
if (a[j] > a[i]) {
std::swap(a[i], a[j]);
}
}
if (a[i] == 0) return 1 << (n - i + 1);
if (a[i] == 1) return -1;
//消元
for (int k = n; k; k--) {
if (a[i] & (1 << k)) {
for (int j = 1; j <= n; j++) {
if (i != j && a[j] & (1 << k)) {
a[j] ^= a[i];
}
}
break;
}
}
}
return 1;
}
int main(int argc, char const *argv[]) {
scanf("%d", &T);
while (T--) {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
}
for (int i = 1, j; i <= n; i++) {
scanf("%d", &j);
a[i] ^= j;//等号右侧
a[i] |= 1 << i;//a[i][i] = 1
}
while (~scanf("%d %d", &x, &y) && (x | y)) {
a[y] |= 1 << x;//a[y][x] = 1
}
int ans = gauss();
if (ans > 0) printf("%d\n", ans);
else puts("Oh,it's impossible~!!");
}
return 0;
}
最新文章
- jq选择器基础
- TSQL 分组集(Grouping Sets)
- Reactjs+Webpack+es2015 入门HelloWord(一)
- 对属性NaN的理解纠正和对Number.isNaN() 、isNaN()方法的辨析
- 合并excel中多个sheet
- 一次外企QQ面试
- linux centos 6.5 运行MySQL Workbench 6.0找不到 libmysqlclient.so.16和libmysqlclient_r.so.16
- 2016年10月29日 星期六 --出埃及记 Exodus 19:14
- 视频特效制作:如何给视频添加边框、水印、动画以及3D效果
- Python2安装说明
- python遍历目录文件脚本的示例
- UIView局部点击(转)
- B树,B-树,B+树,B*树
- 基础才是重中之重~关于ThreadStatic和Quartz的一点渊源
- java常见排序方法
- Javaweb项目碰到的问题- Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
- 爬取西刺网的免费IP
- 你真的了解interface和内部类么
- 菜鸟脱壳之脱壳的基础知识(三)——寻找OEP
- Java NIO -- 管道 (Pipe)