#P6616. 环 Rings
环 Rings
题目背景
一九二九不出手,三九四九冰上走,五九六九隔河看杨柳;
七九河开,八九雁来,九九加一九,耕牛遍地走。
「九」自古以来就是一个奇妙的数字,而你今天要解决的问题,也与「九」有关。
题目描述
你有一个 连环,和你熟知的九连环有着相同的结构。
上图是一个九连环。
顾名思义, 连环有一个长长的横梁,上面挂着 个 彼此影响 的环。
我们给这 个环编号,其中最靠横梁头部的环为第 个环,其次为第 个环,以此类推……最靠横梁尾部的环为第 个环;
定义 表示第 个环的状态,其中 表示这个环在横梁上, 表示这个环不在横梁上;
定义 拆装一个环 为使环的状态 取反,即状态从 变成 或从 变成 。
这些环的合法拆装规则如下:
- 第 个环随时可以单独拆装;
- 第 个环可以单独拆装,当且仅当 且 ,都有 ;
- 若 ,则第 两个环可以一起拆装。
现在你需要解决的问题是:已知一个 连环的初始状态,请你求出拆除这个 连环的最少拆装步数。
输入格式
本题数据量较大,故采取 特殊 输入方式。
第一行一个正整数 。
第二行一个正整数 ;
接下来 行输入描述了初始状态:
第 行有两个整数 ,表示往初始的 连环的尾部连续添加 个状态为 的环。
输出格式
一行共一个整数,表示从拆下这个 连环所需要的最少拆装次数。
由于答案可能很大,你只需要输出答案对 取模后的结果。
4
3
1 1
1 0
2 1
7
15
4
5 1
2 1
4 0
4 1
15424
3
3
1 1
1 0
1 1
5
提示
本题采用 捆绑测试,开启 O2优化。
保证 ;
保证 ;
保证初始状态中 只有 个 ;
保证 ;
没有特殊限制。
对于所有数据,满足 ,,,
数据保证 。
样例 #1 解释
样例描述的是 连环,初始状态为 1101
。
用最少合法拆装次数完成的方法如下:
1. 1101 -> 1100
2. 1100 -> 0100
3. 0100 -> 0111
4. 0111 -> 0110
5. 0110 -> 0010
6. 0010 -> 0011
7. 0011 -> 0000
共 步。
题外话
本题中 连环的第 条拆装规则,在大部分的九连环玩法说明中都没有提到,但它确实是一个真实可行的操作呢!