#P6842. [BalkanOI2009] Strip

[BalkanOI2009] Strip

题目背景

英文题面 | 题目来源

题目描述

让我们考虑一条宽度为 11、长度为 nn、厚度为可忽略的条带,由单位正方形组成。如图所示(其中 n=7n=7),从它的左边开始,我们使用从 00nn 的非负整数命名每个垂直的线。我们只能沿着这些垂直线折叠长方形条带,并且在这之后两个部分被粘在一起,不再会被拉直。

自然地,在折叠之后,一些编号会重叠在一起,形成一个有更多编号的垂直线。图中显示了沿垂直线 33 折叠后的情况。在此操作之后,有一些线会有两个编号。例如,我们同样可以说 1155,他们代表的是同一条垂直线。再沿着 22 折叠(我们也可以说 44,都是一样的),就会有一条垂直线有甚至三个名称,正如我们所看到的:(1;3;5)(1;3;5)。举个例子,如果我们沿着段 33 对长方形条带进行折叠,我们只需旋转条带,而不改变其名称或长度。我们把这样的折叠称为“空的”:它不是非法的,只是没有做任何重大的改变。

按照这种方式,一组长度为 kk 的整数数列(每个整数从 00nn)唯一地定义了条带的折叠方法。编写一个程序,找出折叠完成后该条带的长度。

输入格式

从标准输入读入。

  • 第一行两个正整数 n,kn,k,表示条带长度和折叠次数。
  • 第二行 kk 个非负整数,表示折叠的顺序,每个数都在 [0,n]\left[0,n\right] 的范围内。

输出格式

输出到标准输出。

一行,一个整数,表示折叠后的长度。

7 2
3 2
3
9 5
5 9 2 8 3
2

提示

数据范围

nn 有不超过 1818 个整数位,k10000k\le 10000


样例 22 解释

折叠步骤如图:

初始情况:{0123456789}\{0\,1\,2\,3\,4\,5\,6\,7\,8\,9\}

折叠步骤:$\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\}$。

(备注:样例 11 与图片相同)