当前位置: 首页 > news >正文

洛谷P3857

题目大意

共有 \(N\) 个灯泡,最开始都是不亮的,由 \(M\) 个开关控制,每个开关有各自的控制范围,开关可以让亮的灯不亮,同时让不亮的灯变亮。求这些灯光可能有多少种状态。

问题转化

  • 每个开关看作一个长度为 \(N\) 的二进制向量(O 表示 \(1\),X 表示 \(0\))。
  • 每个灯泡的状态看作一个长度为 \(N\) 的二进制向量。
  • 按下开关相当于对当前状态向量进行异或操作

问题转化为:给定 \(M\)\(N\)\(0/1\) 向量,问这些向量通过异或运算能生成多少个不同的向量。

解题思路

标签:线性基
设向量集合的线性基大小为 \(k\)(即秩),那么:

  • 线性基可以生成 \(2^k\) 个不同的向量。
  • 每个开关按或不按,正好对应 \(2^M\) 种选择。
  • 但不同的选择可能产生相同的结果,所以实际不同的结果数是 \(2^k\)

时间复杂度

主要来自于高斯消元法:

  • 外层循环:最多 \(n\)
  • 内层循环:寻找和消元各 \(m\)
  • 总复杂度:\(O(n \times m)\)

对于 \(n, m \leq 50\),可以接受。

参考代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;ll n, m;            
ll a[520];          // 存储每个开关的二进制表示
ll k = 0;           // 线性基的大小(秩)
ll p = 2008;        // 高斯消元法求线性基
void Gauss() {// 从高位到低位处理每一位(第62位到第0位)for (ll i = 62; i >= 0; i--) {// 寻找第i位为1的开关for (ll j = k; j < m; j++) {if ((a[j] >> i) & 1LL) {  // 如果第j个开关的第i位是1swap(a[j], a[k]);     // 交换到第k行break;}}// 如果第i位没有1,继续处理下一位if (((a[k] >> i) & 1LL) == 0LL) continue;// 用第k行消去其他行的第i位for (ll j = 0; j < m; j++) {if (j != k && ((a[j] >> i) & 1LL)) {a[j] ^= a[k];  // 异或消元}}k++;  // 成功找到一个基向量,秩加1}
}int main() {cin >> n >> m;string s;// 读入每个开关的控制状态for (ll i = 0; i < m; i++) {cin >> s;// 将字符串转换为二进制数for (ll j = 0; j < n; j++) {if (s[j] == 'O') {a[i] |= (1LL << j);  // 第j位设为1}}}// 构建线性基Gauss();ll result = 1;for (ll i = 0; i < k; i++) {result = (result * 2) % p;}cout << result;return 0;
}
http://www.jsqmd.com/news/359255/

相关文章:

  • 洛谷P3177
  • 洛谷P1896
  • 计算机小程序毕设实战-基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现基于springboot桂林旅游景点导游平台【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 论文写作利器:6款AI工具打造专业级内容
  • Leetcode 剑指 Offer II 161. 连续天数的最高销售额
  • 【毕业设计】基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现(源码+文档+远程调试,全bao定制等)
  • 别被名字吓到:锯齿迭代器(Zigzag Iterator)其实是个“很人性”的算法
  • 智能辅助:6款AI工具优化论文写作流程与成果
  • 小程序毕设选题推荐:基于springboot+小程序的医院挂号系统小程序基于SpringBoot智能在线预约挂号系统微信小程序【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 小程序计算机毕设之基于springboot+小程序的医院挂号系统小程序基于SpringBoot+微信小程序的微信医院挂号系统(完整前后端代码+说明文档+LW,调试定制等)
  • 适合小白的git的基础使用方法
  • 借助AI技术:6款工具让论文写作更轻松精准
  • 【计算机毕业设计案例】基于springboot的文化旅游小程序基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现(程序+文档+讲解+定制)
  • 【计算机毕业设计案例】基于springboot+小程序的桂林旅游桂林源记小程序桂林旅游景点导游平台的设计与实现(程序+文档+讲解+定制)
  • 提升学术写作:6款AI工具助你高效完成论文
  • 【计算机毕业设计案例】基于JAVA+SpringBoot+MySQL+微信小程序的校园点餐系统基于springboot+小程序的校园点餐系统小程序的设计与实现(程序+文档+讲解+定制)
  • 论文写作新选择:6款AI工具实现高效与高质量
  • 洛谷P4035
  • 第一章使用Navicat创建数据库
  • 小程序毕设项目:基于springboot+小程序的桂林旅游桂林源记小程序的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 洛谷P2607
  • 我们去看看小明和小华交流什么神秘的C++项目吧
  • Visual Studio 2026新解决方案格式slnx详解
  • 你永远不知道用户会怎样使用你的软件
  • CF2155E
  • 【CTFshow-pwn系列】03_栈溢出【pwn 042】详解:64位下的字符串搜寻与 ROP
  • 安全工具篇动态绕过DumpLsass凭据SysCALL调用对抗EDR打乱源头特征
  • 网络编程 SDN
  • 小程序计算机毕设之基于springboot+小程序的校园点餐系统小程序的设计与实现基于JAVA+SpringBoot+MySQL+微信小程序的校园点餐系统(完整前后端代码+说明文档+LW,调试定制等)
  • 以工程思维,破局软件开发的混沌