Lintcode704. Bulb Switcher II

描述

一个房间中有 n 盏灯最初是开着的,并且墙上有 4 个开关。在对开关进行 m 次未知的操作后,你需要返回这 n 盏灯有多少种不同的状态。
假设 n 盏灯的标号为 [1, 2, 3 ..., n], 4 个开关的功能如下:
1.将所有灯从开变成关,从关变成开。
2.将标号为偶数的灯从开变成关,从关变成开。
3.将标号为奇数的灯从开变成关,从关变成开。
4.将标号为 (3k + 1) 的灯从开变成关,从关变成开,k = 0, 1, 2...

样例

给出 n = 1, m = 1。
返回 2 // 状态可以是: [on], [off]

给出 n = 2, m = 1。
返回3 // 状态可以是: [on, off], [off, on], [off, off]

共有四种开关,分别标记为①②③④ ,将每次所按的开关用序号表示,可以用一个长度为m的序列表示开关打开次序,例如④③②③①表示共开5次开关,每次开启对应开关。

其实①②③之间有特殊的关系,开启②和③各一次,与直接开①一次效果相同。继而又发现,开启①和②各一次,与直接开③一次效果相同;开启①和③各一次,与直接开②一次效果相同,而且与开启顺序无关。那么上边的④③②③①可以简化为④(③②)(③①)=④①②=④③。

当只开启一次,即m = 1时,与n有关:

  1. n=1,会有两种结果,[on],  [off]。
  2. n=2,因为此时③与④相同,3k+1只有1,会有三种结果。
  3. n>2,此时四种开关功能均不同,所以有四种结果。

当开启2次,第一次开启完有四种情况①,②,③,④。第二次有4*4=16中结果,但是其中有很多重复,对其进行化简。

使用s表示初始状态

(纵)第一次
①①=s①②=③①③=②①④
②①=③②②=s②③=①②④
③①=②③②=①③③=s③④
④①④②④③④④=s

共有①,②,③,①④,②④,③④,s七种结果。

当开启超过3次时,会比开启2次多出一种结果,即④。

但是,这些都是基于第一次开启后会有4中不同结果的前提。如果n小于3,第一次开启后,结果数基于之前的分析小于4,此时结果数=2^n。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值