• [TJOI2008]彩灯


    题目描述

    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。

    另外有40%的数据中,N和M有一个为50

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

    题目问的就是在所有01串中任选起来异或,一共能得到多少不同的结果

    构造线性基,因为把原先数字选出来异或可以看作在线性基里选数字出来异或

    而线性基里的数字满足只要选择不同则结果不同的性质,方便计算

    如果线性基里有$x$个数字,则答案为$2^x$

    注意取模

    #include <string>
    #include <iostream>
    using namespace std;
    typedef long long ll;
    string s;
    ll p[70] = {0};
    int main(){
        int n, m;
        cin >> n >> m;
        ll x;
        while(m--){
            cin >> s;
            x = 0;
            for(int i = 0; i < n; i++){
                x |= (ll)(s[i] == 'O') << i;
            }
            for(int j = 60; ~j; j--){
                if(x & 1LL << j){
                    if(p[j]){
                        x ^= p[j];
                    }
                    else{
                        p[j] = x;
                        break;
                    }
                }
            }
        }
        int tot = 0;
        for(int j = 60; ~j; j--){
            if(p[j]){
                tot++;
            }
        }
        cout << (1LL << tot) % 2008 << endl;
        return 0;
    }
  • 相关阅读:
    LeetCode:Remove Nth Node From End of List
    链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)
    快速排序partition过程常见的两种写法+快速排序非递归实现
    LeetCode:Permutations, Permutations II(求全排列)
    LeetCode:3Sum, 3Sum Closest, 4Sum
    LeetCode:Two Sum
    判断一个图是否有环
    c++设计一个无法被继承的类
    设计模式--单例模式
    windows多线程同步互斥--总结
  • 原文地址:https://www.cnblogs.com/ruoruoruo/p/11621997.html
Copyright © 2020-2023  润新知