题目链接

https://www.acwing.com/problem/content/1962/

思路

这题如果用一个数组的话是会炸空间的,所以我们采用状态压缩,因为每个灯的状态只有0和1,那么我们直接定义一个状态表示的是当前的状态,然后由于这个长度是16,所以我们最多能有2162^{16}216种开关灯的状态,我们直接用一个int即可,然后我们发现关于灯的开关状态其实就是那当前这一位和前面一位(环形)做一个异或操作,由于数据一定会出现循环,所以一旦我们发现了循环的地方就直接取模然后继续往后走余下的步数即可。详情请看代码

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000009
ll ksm(ll a,ll b) {ll ans = 1;for(;b;b>>=1LL) {if(b & 1) ans = ans * a % mod;a = a * a % mod;}return ans;
}ll lowbit(ll x){return -x & x;}const int N = 2e6+10;int n;
ll m;
int vis[N];int update(int state){//更新状态int ans = 0;for(int i = 0;i < n; ++i) {int j = (i - 1 + n) % n;int l = state >> i & 1;int r = state >> j & 1;ans |= (l ^ r) << i;}return ans;
}
void print(int state){//输出每一位for(int i = 0;i < n; ++i) {cout<<(state>>i & 1)<<endl;}
}int main()
{cin>>n>>m;int state;for(int i = 0;i < n; ++i) {int k;cin>>k;state |= k<<i;//初始初始状态}memset(vis,-1,sizeof vis);//初始化vis[state] = 0;for(int i = 1;1;i++){state = update(state);//更新当前状态if(i == m){//如果直接找到了第m个状态直接输出print(state);break;}else if(vis[state] == -1) {//如果没有记录该状态,那么记录出现在第几次vis[state] = i;}else {//如果找到了一个循环节int len = i - vis[state];int leave = (m-i) % len;//剩下的步数while(leave--) state = update(state);print(state);return 0;}}return 0;
}

AcWing 1960. 闪烁(状态压缩+枚举)相关推荐

  1. LeetCode 2002. 两个回文子序列长度的最大乘积(状态压缩+枚举状态子集+预处理)

    文章目录 1. 题目 2. 解题 2.1 超时 2.2 预处理优化 1. 题目 给你一个字符串 s ,请你找到 s 中两个 不相交回文子序列 ,使得它们长度的 乘积最大 . 两个子序列在原字符串中如果 ...

  2. LeetCode 1178. 猜字谜(状态压缩+枚举二进制子集+哈希)

    文章目录 1. 题目 2. 解题 1. 题目 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧. 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件, ...

  3. POJ 1873 The Fortified Forest (凸包,状态压缩枚举)

    题目链接:http://poj.org/problem?id=1873 题意:给出一些树,每棵树有坐标,高度,以及价值,要求砍掉一些树,用那些木材,将其它树围起来,要求花最小的代价,代价相同,要求砍掉 ...

  4. uva11825(状态压缩+枚举子集)黑客的攻击

    例题 29 黑客的攻击( Hacker's Crackdown, UVa 11825 ) 假设你是一个黑客, 侵入了一个有着 n 台计算机(编号为 0 , 1 , - , n - 1 ) 的网络. 一 ...

  5. zcmu-1957(状态压缩枚举)

    1957: 乌鸦坐飞机 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 83 Solved: 6 [Submit][Status][Web Board] ...

  6. HDU-4568 Hunter 状态压缩

    题意:给定一个网格图,图中有一些点要求全部走到,问最少的花费是多少,从任意边界进入,任意边界出去,如果不能够全部走到,输出0. 解法:一次spfa从边界上的所有点出发,计算到K个宝藏的最短路,然后计算 ...

  7. LeetCode 1879. 两个数组最小的异或值之和(状态压缩DP)

    文章目录 1. 题目 2. 解题 2.1 回溯 2.2 状态压缩DP 1. 题目 给你两个整数数组 nums1 和 nums2 ,它们长度都为 n . 两个数组的 异或值之和 为 (nums1[0] ...

  8. LeetCode 1723. 完成所有工作的最短时间(DFS+剪枝 / 状态压缩DP)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 状态压缩DP 265 / 3871, 前6.85% 前3题题解: LeetCode 5649. 解码异或后的数组(位运算) LeetCode ...

  9. 《算法竞赛进阶指南》打卡-基本算法-AcWing 93. 递归实现组合型枚举:递归与递推、dfs、状态压缩

    文章目录 题目解答 题目链接 题目解答 分析: 此题和笔者另一篇博文很像,只不过是限定了个数.<算法竞赛进阶指南>打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归.二进 ...

最新文章

  1. ASP.NET强大的性能
  2. 异步方法顺序调用问题
  3. 40 JavaScript中的高阶函数
  4. flex布局和单行省略不兼容
  5. 如何在Simulink中添加延迟环节
  6. jquery.dataTable.js 绘制表格使用详解
  7. 【渝粤教育】 国家开放大学2020年春季 1020国际私法 参考试题
  8. 王昊奋 | 从聊天机器人到虚拟生命:AI技术的新机遇
  9. 神经网络之感知器算法简单介绍和MATLAB简单实现
  10. 模拟退火法-TSP问题
  11. sql2012 数据库连接错误
  12. 在布局空间标注的尺寸量不对_CAD解决布局标注尺寸不对问题 及快捷键混乱问题...
  13. WPF在DLL中读取Resource的方法
  14. 原理图端口符号_电气原理图与接线图的区别和联系
  15. MSN机器人-头像显示
  16. html做群聊通讯方法,一例完整的websocket实现群聊demo
  17. 软件测试-Mysql数据库3
  18. 完全用Linux工作--你还在用老掉牙的windows吗?
  19. MySQL中添加新字段
  20. UPC-5572 - Lifeguards - 动态规划

热门文章

  1. python 内置函数:iter()
  2. python 生成嵌套字典
  3. 大数据笔记(二十一)——NoSQL数据库之Redis
  4. python 一些练习 (初学)
  5. 诡异的json包含bom头
  6. Ogre1.8.1 Basic Tutorial 6 - The Ogre Startup Sequence
  7. 【驱动】USB驱动·入门
  8. vue-cli+gitlab代码管理时,vue项目配置文件设置
  9. vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页
  10. 如何利用图像识别、语音识别、文本挖掘做好鉴黄?