luogu#P11061. 【MX-X4-T1】「Jason-1」IO++

【MX-X4-T1】「Jason-1」IO++

题目描述

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

该程序将从前往后依次执行,对于第 ii 个元素 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

  • 对于输入 [2,3,4,][2, 3, 4, \ldots],程序 [0,0,0,1,2][0, 0, 0, 1, 2][0,0,1,2][0, 0, 1, 2][0,1,0,2][0, 1, 0, 2] 的输出均为 [2,3][2, 3],符合题意。
  • 可以验证,对于任意的长度为 10101010^{10^{10}}、值为 [1,101010][1, 10^{10^{10}}] 之内整数的输入,两个程序执行的输出语句次数相同,且每一次输出的结果均一致。

但是,程序 [0,1,1][0,1,1] 无法实现相同的功能,因为对于输入 [2,3,4,][2, 3, 4, \ldots],该程序的输出为 [2,2][2, 2],与原程序的 [2,3][2, 3] 不相同,故不能实现相同功能。

程序 [0,1,2][0,1,2] 是不合法的程序,因为运行第 33 条指令(即一条输出语句 ai=2a_i = 2)时,只执行了 11 次输入语句。

【样例解释 #2】

不存在更短的程序能实现相同功能。

【样例解释 #3】

长度为 55 的程序 [0,1,0,2,1][0,1,0,2,1] 可以实现相同功能。

【样例解释 #4】

由于没有输出语句,因此长度为 00 的空程序即可实现相同功能。

【数据范围】

对于 50%50\% 的数据,保证 b1,,bnb_1, \ldots, b_n 非严格单调递增,即对于任意 2in2 \le i \le n 均有 bi1bib_{i-1} \le b_i

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