#L0400. 最短等价程序

最短等价程序

题目描述

有一类程序只包含输入语句与输出语句,我们可以用一个非负整数序列 [a1,a2,][a_1, a_2, \ldots] 来描述它。

程序从前往后依次执行每个元素 aia_i

  • ai=0a_i = 0,表示一条输入语句:程序从输入中读取一个整数。
  • 否则,表示一条输出语句:程序输出第 aia_i 次输入读取到的整数。保证执行本语句前,程序至少进行了 aia_i 次输入。

特别地,一个长度为 00 的空程序也是合法的。

给定一个长度为 nn 的程序 [b1,,bn][b_1, \ldots, b_n],求能够实现相同功能的程序所需的最短长度。

两个程序功能相同,当且仅当对于任意长度为 10101010^{10^{10}}、值在 [1,101010][1, 10^{10^{10}}] 范围内的输入序列,两个程序执行的输出语句次数相同,且每次输出的结果均一致。

输入格式

第一行,一个正整数 nn,表示程序的长度。

第二行,nn 个非负整数 b1,,bnb_1, \ldots, b_n,描述了一个程序。

输出格式

仅一行一个整数,表示实现相同功能的程序的最小长度。

样例

5
0 0 0 1 2
4
7
0 0 1 0 3 1 3
7
7
0 1 0 0 2 1 0
5
4
0 0 0 0
0

提示

【样例解释 #1】

长度为 44 的程序 [0,0,1,2][0,0,1,2][0,1,0,2][0,1,0,2] 均可实现相同的功能。可以证明不存在长度 3\leq 3 且功能相同的程序,所以答案为 44

【数据范围】

对于 50%50\% 的数据,保证 b1,,bnb_1, \ldots, b_n 非严格单调递增。

对于 100%100\% 的数据,1n1051 \le n \le 10^50bin0 \le b_i \le n,且保证执行任何输出语句前,程序至少进行了对应次数的输入。

难度 普及-
通过率
尝试 0
已通过 0
ID
1128
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者