SGU 260.Puzzle (异或高斯消元)
题意:
有n(<200)个格子,只有黑白两种颜色.可以通过操作一个格子改变它和其它一些格子的颜色。给出改变的关系和n个格子的初始颜色,输出一种操作方案使所有格子的颜色相同。
Solution:
很显然的高斯消元。
这里采用了类似SGU275的方法做。
/*
解异或方程组
*/
#include <iostream>
#include <bitset>
#include <cstring>
using namespace std;
const int N = ;
bitset<N> a[N], mask[N];
int base[N];
int Gauss ( int n )
{
for ( int i = ; i <= n; ++i ) {
for ( int j = ; j <= n; ++j ) {
if ( a[i][j] ) {
if ( !~base[j] ) {
mask[i][i] = ;
base[j] = i;
break;
}
a[i] ^= a[base[j]];
mask[i] ^= mask[base[j]];
}
}
}
} int n, m;
int main()
{
ios::sync_with_stdio ( );
cin >> n;
for ( int i = , k; i <= n; ++i ) {
cin >> k;
for ( int j = , t; j <= k; ++j ) {
cin >> t;
a[i][t] = ;
}
}
memset ( base, -, sizeof base );
Gauss ( n );
for ( int i = , k; i <= n; ++i ) {
cin >> k;
a[n + ][i] = k;
a[n + ][i] = k ^ ;
}
int k;
for ( k = ; k <= n; ++k ) {
if ( a[n + ][k] == ) {
if ( !~base[k] ) {
break;
}
a[n + ] ^= a[base[k]];
mask[n + ] ^= mask[base[k]];
}
}
if ( k > n ) {
cout << mask[n + ].count() << endl;
for ( int i = ; i <= n; ++i ) {
if ( mask[n + ][i] )
cout << i << " ";
}
} else {
for ( k = ; k <= n; ++k ) {
if ( a[n + ][k] ) {
if ( !~base[k] ) {
break;
}
a[n + ] ^= a[base[k]];
mask[n + ] ^= mask[base[k]];
}
}
if ( k > n ) {
cout << mask[n + ].count() << endl;
for ( int i = ; i <= n; ++i ) {
if ( mask[n + ][i] )
cout << i << " ";
}
} else {
cout << - << endl;
}
}
}
SGU 260.Puzzle (异或高斯消元)的更多相关文章
- POJ 1222【异或高斯消元|二进制状态枚举】
题目链接:[http://poj.org/problem?id=1222] 题意:Light Out,给出一个5 * 6的0,1矩阵,0表示灯熄灭,反之为灯亮.输出一种方案,使得所有的等都被熄灭. 题 ...
- SGU 200 Cracking RSA (高斯消元)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出m个整理,因子全部为前t个素数.问有多少 ...
- Luogu3164 CQOI2014 和谐矩阵 异或高斯消元
传送门 题意:给出$N,M$,试构造一个$N \times M$的非全$0$矩阵,其中所有格子都满足:它和它上下左右四个格子的权值之和为偶数.$N , M \leq 40$ 可以依据题目中的条件列出有 ...
- 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 ^ ...
- POJ1830(异或高斯消元)
对于某个开关,都有n个选项可能影响它的结果,如果会影响,则系数为1,否则系数为0:最后得到自由元的个数,自由元可选0也可选1. #include <cstdio> #include < ...
- SGU 200. Cracking RSA (高斯消元求自由变元个数)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=200 200. Cracking RSA time limit per test: ...
- SGU 275 To xor or not to xor(高斯消元)
题意: 从n个数中选若干个数,使它们的异或和最大.n<=100 Solution 经典的异或高斯消元. //O(60*n) #include <iostream> using nam ...
- BZOJ.1923.[SDOI2010]外星千足虫(高斯消元 异或方程组 bitset)
题目链接 m个方程,n个未知量,求解异或方程组. 复杂度比较高,需要借助bitset压位. 感觉自己以前写的(异或)高斯消元是假的..而且黄学长的写法都不需要回代. //1100kb 324ms #i ...
- 高斯消元 & 线性基【学习笔记】
高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017- ...
随机推荐
- 【转】sublime text 2 下的Markdown写作
sublime text 2 下的Markdown写作 作为Windows/Mac/Linux下强大的文本编辑器,st提供了对Markdown语言的支持.通过设置可实现markdown预览和转换功 ...
- go语言与所谓的包
import后面接的是目录的名字,而不是所谓包的名字,并且如果一个目录下面还有目录的话都必须要写进去,比如: import "MyPackage" import "MyP ...
- position与anchorPoint
相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置?CALayer的position点是哪一点呢?anchorPoint与position有什 ...
- apache安装php7过程中遇到到段错误
1.假如apache的配置文件httpd.conf同时加载libphp5.so和libphp7.so 2.如图所示,modules下同时存在libphp5.so/libphp7.so 3.启动apac ...
- 电脑无法识别U盘(usb类外接设备)的解决办法
首先分析USB无法识别的硬件原因: 1.BIOS禁用了USB设备.(进入BIOS,将"Enable USB Device"修改为"Enable") 2.USB接 ...
- jq问题处理
1.同一个事件,点击显示和隐藏 $(document).ready(function(){ $('.container .nav-header').click(function(){ var chan ...
- Webdriver:Unsupported Marionette protocol version 2, required 3
升级到firefox到47以上版本即可 坑人的Mozilla不能起个我们熟识的名字吗? 先是webdriver.gecko.driver后是Marionette protocol. 1.WebDr ...
- struts总结
struts总结 1.为什么学习Struts框架 a.Struts框架好处 struts2是主流的开发技术,大多数公司在使用,struts把相关的servlet组件的各种操作都进行了相应的封装,这样就 ...
- [Javascript] Chaining the Array map and filter methods
Both map and filter do not modify the array. Instead they return a new array of the results. Because ...
- 采用jsp用表格的形式显示
<%@page import="cn.hncu.domain.*"%><%@ page language="java" import=&quo ...