传送门
题目描述
Peter女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜。已知一组彩灯是由一排N个独立的灯泡构成的,并且有M个开关控制它们。从数学的角度看,这一排彩灯的任何一个彩灯只有亮与不亮两个状态,所以共有2N个样式。由于技术上的问题,Peter设计的每个开关控制的彩灯没有什么规律,当一个开关被按下的时候,它会把所有它控制的彩灯改变状态(即亮变成不亮,不亮变成亮)。假如告诉你他设计的每个开关所控制的彩灯范围,你能否帮他计算出这些彩灯有多少种样式可以展示给他的女朋友?
注: 开始时所有彩灯都是不亮的状态。
输入格式
每组测试数据第一行为两个整数N和M,用空格隔开。紧接着是有M行,每行都是一个长度为N的字符串,表示一个开关控制彩灯的范围(N盏灯),如果第i个字母是大写字母’O’,则表示这个开关控制第i盏灯,如果第i个字母是大写字母’X’,则表示这个开关不控制此灯。
输出格式
输出这些开关和彩灯可以变换出来的样式数目。由于这个值可能会很大,请求出它对于整数2008的余数。
输入
2 3
OO
XO
OX
输出
4
说明/提示
可见样例中第一个开关控制了所有的彩灯,而后两个开关分别控制了第一个和第二个彩灯,这样我们可以只用后两个开关控制彩灯,可以变换出来所有的22个状态。
30%的数据中,N和M不超过15。
另外有40%的数据中,N和M有一个为50
100%的数据中,N和M不超过50。
题解
对于这道题的彩灯有两个状态,然后给定哪一个开关控制哪些灯亮,这时候有人可能会想到高斯消元,但是这个题没有给定终态,虽然方
程很好列出来,但是我们求的的亮灯的种类而不是怎么控开关使灯变成什么样子
而这个题的正解使用线性基,但线性基怎么用呢?首先我们知道不同的开关如果能控制同一个灯那么一起使用就会有不同的效果,所以就
相当于不同的开关异或起来能够得到多少种灯光。
我们首先将这个字符串处理成01串,这样我们就便于我们异或了,而每个灯对应的位置是固定的,就把这个01串的二进制转换成十进制,
这样我们就可以构造线性基了,而线性基里的元素是不会异或出相同的值的,所以我们只要知道构造成功的线性基里面有多少个数就行了<