一、Problem

8 间牢房排成一排,每间牢房不是有人住就是空着。每天,无论牢房是被占用或空置,都会根据以下规则进行更改:

如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用。
否则,它就会被空置。
(请注意,由于监狱中的牢房排成一行,所以行中的第一个和最后一个房间无法有两个相邻的房间。)

我们用以下方式描述监狱的当前状态:如果第 i 间牢房被占用,则 cell[i]==1,否则 cell[i]==0。

根据监狱的初始状态,在 N 天后返回监狱的状况(和上述 N 种变化)。

输入:cells = [0,1,0,1,1,0,0,1], N = 7
输出:[0,0,1,1,0,0,0,0]
解释:
下表概述了监狱每天的状况:
Day 0: [0, 1, 0, 1, 1, 0, 0, 1]
Day 1: [0, 1, 1, 0, 0, 0, 0, 0]
Day 2: [0, 0, 0, 0, 1, 1, 1, 0]
Day 3: [0, 1, 1, 0, 0, 1, 0, 0]
Day 4: [0, 0, 0, 0, 0, 1, 0, 0]
Day 5: [0, 1, 1, 1, 0, 1, 0, 0]
Day 6: [0, 0, 1, 0, 1, 1, 0, 0]
Day 7: [0, 0, 1, 1, 0, 0, 0, 0]示例 2:
输入:cells = [1,0,0,1,0,0,1,0], N = 1000000000
输出:[0,0,1,1,1,1,1,0]

提示:

cells.length == 8
cells[i] 的值为 0 或 1
1 <= N <= 10^9

二、Solution

方法一:状态压缩 + 循环节

N 很大,模拟会超时的,这种题要有解的话,一定存在循环节,这里用一个 map 存储状态与天数的映射

当某一个状态在 D1 出现过,且在后面的天数 D2 也出现了的话,就存在一个大小为 D1-D2 的循环节,D 可对循环节进行取模,进而缩小循环次数

class Solution {public:int nextState(int st) {int nst = 0;for (int i = 1; i <= 6; i++) {if (((st>>(i-1))&1) == ((st>>(i+1))&1))nst |= 1 << i;}return nst;}vector<int> prisonAfterNDays(vector<int>& A, int D) {int n = A.size(), st = 0; vector<int> ans(n, 0);unordered_map<int, int> m;for (int i = 0; i < n; i++) if (A[i])st |= (1 << i);while (D) {if (m.count(st))D %= m[st]-D;m[st] = D;if (D >= 1) D--, st = nextState(st);}for (int i = 0; i < n; i++) if ((st >> i) & 1) ans[i] = 1;return ans;}
};

复杂度分析

  • 时间复杂度:O(循环节大小)O(循环节大小)O(循环节大小),
  • 空间复杂度:O(n)O(n)O(n),

【思维题】B024_LC_N 天后的牢房(状态压缩 + 循环节)相关推荐

  1. 状态压缩dp学习小记part2

    继续学习状态压缩的相关知识. 本来准备继续按照上篇博文里提到的那篇论文继续学习,但被矩形完全覆盖虐了回来,决定先做些其他的题增进理解之后再回来做. Zoj 3471 Most Powerful 题目链 ...

  2. 思维题 UVA 10881 Piotr's Ants

    题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置 ...

  3. CSP难度的经典题目/有趣的思维题选讲(一)

    引言 这里讲到的难题是一部分非常典型的题目,但并不是所有.因此这并非是一个全面的知识列表,而只适合提高组同学用来提升能力和拓展视野. 这篇文章在很多地方讲述的不够详细和严谨,因为它的作用并非是题解,而 ...

  4. yoyo思维题(困难) 组合数学

    问题 B: yoyo思维题(困难) 时间限制: 1 Sec  内存限制: 256 MB 提交: 11  解决: 3 [提交][状态][讨论版][命题人:qianyouyou][Edit] [TestD ...

  5. CodeForces - 1102A(思维题)

    https://vjudge.net/problem/2135388/origin Describe You are given an integer sequence 1,2,-,n. You ha ...

  6. ☆【CodeForces - 764C】Timofey and a tree (思维题,树的性质)

    题干: Each New Year Timofey and his friends cut down a tree of n vertices and bring it home. After tha ...

  7. LeetCode 957. N 天后的牢房(查找循环节)

    1. 题目 8 间牢房排成一排,每间牢房不是有人住就是空着. 每天,无论牢房是被占用或空置,都会根据以下规则进行更改: 如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用. 否则,它 ...

  8. TSOJ 好好做题(屑)——递推状态压缩+高精度

    文章目录 题目描述 解题思路 喜闻乐见的AC代码 补充一:高精度 补充二:状态压缩 完整注释代码 后记 题目描述 选修程序设计和算法课程的学生人数为 n,任课老师设置了 m 道练习题目(其中:1 &l ...

  9. 字符串——BZOJ 3097: Hash Killer I【构造题,思维题】

    BZOJ 3097: Hash Killer I[构造题,思维题] 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3097 题意:让你出一组 ...

最新文章

  1. 根据sql生成相应字段
  2. 使用Cloudera Manager部署oozie
  3. FPGA/IC Technology Exchange
  4. springmvc教程--注解开发基础详解
  5. atm系统的用例模型_战斗系统执行式测试经验汇总
  6. 【渝粤教育】国家开放大学2018年春季 0529-22T高级英语阅读(1) 参考试题
  7. 软件工程师的十个“不职业”行为
  8. QSettings生成以及解析配置文件
  9. Spring-IOC推导
  10. ADO.NET编程(4)根据条件查询DataTable的值
  11. Cython 的学习
  12. 自媒体标题不会写?用这个工具,一键生成爆文标题
  13. 电力负荷预测数据集(2018.1-2020.12,间隔15min,10w多条,含温度、风速等天气因素特征)
  14. 兴业数金牛客java笔试题
  15. Kodak Preps 8 for Mac中文破解版永久激活教程
  16. 图像isp 详解_【转】 ISP概述、工作原理及架构
  17. 如何创建GOOGLE ADS的MCC经理账户,有什么好处?
  18. 操作既简单、实用性强的文件批量改名高手
  19. java1000字节是多少汉字_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...
  20. 推荐搜索系统中关于多场景学习的常见方法

热门文章

  1. MySql 数据库数据文件进行恢复
  2. 成为项目经理需要什么证书?你知道吗?
  3. 泰克-吉时利-2200-远程操作
  4. vr全景拍的常规步骤,3dvr全景制作所要用到哪些软件
  5. PC点击QQ联系我们打开QQ添加好友
  6. css3 transition box-shadow 变为inset 不生效
  7. 新闻稿发布后还能修改吗
  8. vscode护眼绿+python环境搭建
  9. 磁盘空间不足怎么办,如何处理分配磁盘的空间?
  10. 一级计算机windows考试试题,全国计算机等级考试一级笔试试题Windows(2)