题目传送门

彩灯

题目描述

Peter女朋友的生日快到了,他亲自设计了一组彩灯,想给女朋友一个惊喜。已知一组彩灯是由一排N个独立的灯泡构成的,并且有M个开关控制它们。从数学的角度看,这一排彩灯的任何一个彩灯只有亮与不亮两个状态,所以共有2N个样式。由于技术上的问题,Peter设计的每个开关控制的彩灯没有什么规律,当一个开关被按下的时候,它会把所有它控制的彩灯改变状态(即亮变成不亮,不亮变成亮)。假如告诉你他设计的每个开关所控制的彩灯范围,你能否帮他计算出这些彩灯有多少种样式可以展示给他的女朋友?

注: 开始时所有彩灯都是不亮的状态。

输入输出格式

输入格式:

每组测试数据第一行为两个整数N和M,用空格隔开。紧接着是有M行,每行都是一个长度为N的字符串,表示一个开关控制彩灯的范围(N盏灯),如果第i个字母是大写字母’O’,则表示这个开关控制第i盏灯,如果第i个字母是大写字母’X’,则表示这个开关不控制此灯。

输出格式:

输出这些开关和彩灯可以变换出来的样式数目。由于这个值可能会很大,请求出它对于整数2008的余数。

输入输出样例

输入样例#1:

2 3
OO
XO
OX
输出样例#1:

4

说明

可见样例中第一个开关控制了所有的彩灯,而后两个开关分别控制了第一个和第二个彩灯,这样我们可以只用后两个开关控制彩灯,可以变换出来所有的22个状态。

30%的数据中,N和M不超过15。

70%的数据中,N和M不超过50。


  分析:

  很显然,控制器可以转换成一个二进制数,那么很不难想到用线性基了。

  但是这道题有个坑点,因为控制器控制的位置要么都亮要么都不亮,所以是不能分开控制的,那么求出线性基以后当然不能简单的异或,应该是每有一个基向量就让答案乘以2再加1。还有一种全部灯都不亮的情况,所以最后答案还要加1。(做出来这题后被读入卡了好久。。。)

  Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,a[],b[],ans;
int main()
{
scanf("%lld%lld",&n,&m);
char ch[];
for(int i=;i<=m;i++){
scanf("%s",ch);
for(int j=;j<n;j++)
if(ch[j]=='O')
a[i]^=(1LL<<j);}
for(int i=;i<=m;i++)
for(int j=;j>=;j--){
if(!(a[i]>>j))continue;
if(!b[j]){b[j]=a[i];break;}
a[i]^=b[j];}
for(int j=;j>=;j--)
if(b[j])ans=ans*+;ans++;
printf("%lld",ans%);
return ;
}

洛谷P3857 [TJOI2008]彩灯 [线性基]的更多相关文章

  1. 洛谷P3857 [TJOI2008]彩灯(线性基)

    传送门 线性基裸题 直接把所有的状态都带进去建一个线性基 然后答案就是$2^{cnt}$($cnt$代表线性基里数的个数) //minamoto #include<cstdio> #inc ...

  2. [洛谷P3857][TJOI2008]彩灯

    题目大意:有$n$盏灯,$m$个开关($n,m\leqslant 50$),每个开关可以控制的灯用一串$OX$串表示,$O$表示可以控制(即按一下,灯的状态改变),$X$表示不可以控制,问有多少种灯的 ...

  3. 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)

    LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...

  4. BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)

    题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...

  5. 洛谷3857 [TJOI2008]彩灯

    题目描述 已知一组彩灯是由一排N个独立的灯泡构成的,并且有M个开关控制它们.从数学的角度看,这一排彩灯的任何一个彩灯只有亮与不亮两个状态,所以共有2N个样式.由于技术上的问题,Peter设计的每个开关 ...

  6. 洛谷P4570 [BJWC2011]元素 线性基

    正解:线性基+贪心 解题报告: 传送门! 这题其实没什么好写题解的,,,显然贪心一下尽量选魔力大的,不用证明趴挺显然的来着 所以就直接按魔力排个序,插入线性基里面,能插就加个贡献,over 放下代码趴 ...

  7. [TJOI2008]彩灯 线性基

    题面 题面 题解 题意:给定n个01串,求互相异或能凑出多少不同的01串. 线性基的基础应用. 对于线性基中的01串,如果我们取其中一些凑成一个新的01串,有一个重要的性质:任意2个不同方案凑出的01 ...

  8. luogu 3857 [TJOI2008]彩灯 线性基

    可以将每一个开关控制的灯的序列看作是0/1组成的二进制. 由于灯的开和关是满足异或的性质的,所以直接求一下线性基大小即可. 答案为 $2^{size}.$ #include <cstdio> ...

  9. 洛谷 P3857 彩灯 题解

    题面 对于每一个开关,我们可以看成一个0/1串,初始是一个全部为0的串,要求经过这些开关的操作后,出现的不同的0/1串的个数 建模就是存在一些数,这些数异或起来是0(等价于没有操作).那么需要求一个集 ...

随机推荐

  1. [LeetCode] 30. Substring with Concatenation of All Words ☆☆☆

    You are given a string, s, and a list of words, words, that are all of the same length. Find all sta ...

  2. codeblocks 设置代码自动补全

    熟悉使用一些开发类IDE的朋友对代码自动补全一定印象深刻,如Visual studio,eclipse等,我们在程序中定义的那一个个超长的变量函数名只需打出几个字母就可自动补全,但是在codebloc ...

  3. css table-border

    1.table上设边框,td上设边框: <style> table{border-right:1px solid #F00;border-bottom:1px solid #F00} ta ...

  4. CSS 颜色属性

    一.十六进制表示,如: a{ color: #F0E68C; } 当RGB一样时,可以简写,如#AABBCC 可以写成 #ABC 二.rgb(r,g,b)形式,其中rgb的值为1~255之间,如: a ...

  5. spring boot 使用logback日志系统的详细说明

    springboot按照profile进行打印日志 log4j logback slf4j区别? 首先谈到日志,我们可能听过log4j logback slf4j这三个名词,那么它们之间的关系是怎么样 ...

  6. macbook 安装任意来源

    sudo spctl --master-disable Comand+r Csrutil disable Reboot

  7. 20155335俞昆《Java程序设计》第五周总结

    #  20155335    <Java程序设计>第五周学习总结 ##  教材学习内容总结 ##  教材学习中的问题和解决过程 对于异常处理,程序中总有意想不到的状况所引发的的错误,Jav ...

  8. 源自人脑的神奇算法 -- 读《How to make your own neural network》有感

    最近读到了一本很好的关于机器学习-深度学习的书值得推荐下并特意做了这个学习总结. 为什么推荐 在我认为好书(计算机类)的评判有几个标准: 试图以通俗的语言阐述,并在引入任何新概念的时候都讲述来龙去脉, ...

  9. ASP.NET EF(LINQ/Lambda查询)

    EF(EntityFrameWork) ORM(对象关系映射框架/数据持久化框架),根据实体对象操作数据表中数据的一种面向对象的操作框架,底层也是调用ADO.NET ASP.NET MVC 项目会自动 ...

  10. Linux下libevent安装与示例

    http://www.cnblogs.com/kunhu/p/3632225.html