S40405.4-5 破解面板

传统题 时间 1000 ms 内存 256 MiB 3 尝试 0 已通过 0

4-5 破解面板

破解面板

核心区门前立着一面4×4的开关面板。每个开关有两种状态——凸出或凹陷。按一个开关,会同时翻转它所在的整行和整列——凸出的变凹陷,凹陷的变凸出。

"目标是让所有开关都凸出。"Echo说,"但按开关的顺序没有规律。最后一个开关按下去的时候,可能会把前面已经弄好的又翻回去。"

"那就试所有可能。"你说,"16个开关,每个有两种状态——总共六万多种按法。对终端来说不多。""}},{

CC挑眉:"你刚才还说'更复杂'?"

"复杂是指规则复杂。"你蹲下来,把终端连上面板的接口,"但规模小——16个开关,穷举就行。"

你开始写。用一个16位的数字表示所有开关的状态——每一位对应一个开关,0是凹陷,1是凸出。对于每一种可能的按法,用掩码快速计算最终状态:按第 (i,j)(i,j) 个开关,相当于对第 ii 行和第 jj 列的所有开关做翻转——可以一次性操作整行和整列。

屏幕上开始滚动。第1种、第2种、第100种……第4721种——所有开关都变成了1。

"成了。"你说,"最少6步。"

CC把面板上的六个开关依次按下。每一次按下,整行整列的开关都会发出咔哒声,像是一群机械牙齿在咬合。第六个开关按下后,所有开关同时凸出,面板发出一声清脆的解锁音。

门向上滑开。里面是一条狭窄的走廊,走廊尽头有一扇窗户——透过窗户,能看到47号坑道的全景。

"下面有人。"CC说。

你凑过去看。坑道底部,两个人被铐在椅子上——一个是老周,另一个是头发花白的老人。


题目描述

4×44 \times 4 的开关面板,每个开关凸出或凹陷。按一个开关会翻转它所在的整行和整列。求让所有开关都凸出的最少按法。

输入格式

4×44 \times 4 的矩阵,0表示凹陷,1表示凸出。

输出格式

最少步数,或-1表示无解。

输入样例

-+--
----
----
-+--

输出样例

6
1 1
1 3
1 4
4 1
4 3
4 4

提示

  • 用16位整数表示状态,枚举所有按法。
  • 位运算快速计算翻转后的状态。
  • 规模小,暴力枚举即可。

坑道的三维结构图在你们面前展开——不是普通地图,是一张能量密度热力图。颜色越深的地方,矿物储量越高。Echo说Zero的仓库总是建在富矿带上,因为矿物可以为服务器提供能源。

"要找到最大的富矿区。"你说,"在一片区域里找一块子区域,让它的总能量最高。"

"就像……"CC想了想,"在一片田里找最肥的一块地?"

"对。"

在线编程 IDE

建议全屏模式获得最佳体验