#P6842. [BalkanOI2009] Strip
[BalkanOI2009] Strip
题目背景
题目描述
让我们考虑一条宽度为 、长度为 、厚度为可忽略的条带,由单位正方形组成。如图所示(其中 ),从它的左边开始,我们使用从 到 的非负整数命名每个垂直的线。我们只能沿着这些垂直线折叠长方形条带,并且在这之后两个部分被粘在一起,不再会被拉直。
自然地,在折叠之后,一些编号会重叠在一起,形成一个有更多编号的垂直线。图中显示了沿垂直线 折叠后的情况。在此操作之后,有一些线会有两个编号。例如,我们同样可以说 或 ,他们代表的是同一条垂直线。再沿着 折叠(我们也可以说 ,都是一样的),就会有一条垂直线有甚至三个名称,正如我们所看到的:。举个例子,如果我们沿着段 对长方形条带进行折叠,我们只需旋转条带,而不改变其名称或长度。我们把这样的折叠称为“空的”:它不是非法的,只是没有做任何重大的改变。
按照这种方式,一组长度为 的整数数列(每个整数从 到 )唯一地定义了条带的折叠方法。编写一个程序,找出折叠完成后该条带的长度。
输入格式
从标准输入读入。
- 第一行两个正整数 ,表示条带长度和折叠次数。
- 第二行 个非负整数,表示折叠的顺序,每个数都在 的范围内。
输出格式
输出到标准输出。
一行,一个整数,表示折叠后的长度。
7 2
3 2
3
9 5
5 9 2 8 3
2
提示
数据范围
有不超过 个整数位,。
样例 解释
折叠步骤如图:
初始情况:。
折叠步骤:$\rightarrow \{0\,(1;9)\,(2;8)\,(3;7)\,(4;6)\,5\}\rightarrow \{(1;9)\,(0;2;8)\,(3;7)\,(4;6)\,5\}\rightarrow \{(0;2;8)\,(1;3;7;9)\,(4;6)\,5\}\rightarrow \{(1;3;7;9)\,(0;2;4;6;8)\,5\}$。
(备注:样例 与图片相同)