U118852.好看的数组

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个长度为 nn 的整数数组 aa。现在你可以选择删除其中的某些数字(也可以选择什么都不删),使得这个数组变得“好看”。
一个数组被称为“好看”的,当且仅当该数组中任意相邻的两个元素都不相同。
请问共有多少种不同的删除方法?由于整个数组不能全部被删掉,即删除后保留的数组长度至少为 11

注意:
1.“不同的删除方法”是指删除的元素下标集合不同。即使两个不同的删除方法最终得到的保留数组内容一模一样,只要删除的下标不同,也被视为两种不同的方法(等价于求满足条件的非空子序列个数)。
2. 由于答案可能非常大,请将最终结果对 10000000071000000007109+710^9 + 7)取模后输出。

输入格式

第一行包含一个整数 nn,表示数组初始的长度。
第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,表示这个数组中的每个元素,相邻两个数之间用空格隔开。

输出格式

输出一行一个整数,表示将数组变为“好看”的不同删除方法的总数,对 10000000071000000007 取模后的结果。

输入输出样例

  • 输入#1

    3
    1 2 1

    输出#1

    6
  • 输入#2

    3
    1 1 1

    输出#2

    3
  • 输入#3

    5
    1 2 3 2 1

    输出#3

    26

说明/提示

样例 1 解释:
数组长度为 3,共有 231=72^3 - 1 = 7 种非空删除方案(保留子序列)。

--保留 1 个数:[1] (选第1个), [2], [1] (选第3个) — 均合法,共 3 种。
--保留 2 个数:[1, 2], [2, 1] —合法,共 2 种。[1, 1] (选第1和第3个) — 相邻元素相同,不合法。
--保留 3 个数:[1, 2, 1] — 相邻元素不同,合法,共 1 种。总计 3+2+1=63 + 2 + 1 = 6 种方法。

样例 2 解释
只能选择单独保留其中一个 1(3 种选法),保留任意 2 个或 3 个都会导致相邻元素均为 1,不合法。

数据范围与规定:
对于40%的数据,n≤20。

对于70%的数据,n≤200。

对于100%的数据,n≤2000,第二行的整数不超过50000

首页