Compute’s Wallpaper

发布于 2021-04-17  254 次阅读


Compute's Wallpaper

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 1048576K,其他语言2097152K
64bit IO Format: %lld

题目描述

Compute 买了台新电脑,他的初始壁纸是自带的风景壁纸,但他更喜欢小姐姐。

现在 CSL 连续 n 天每天给 Compute 一张小姐姐照片,第 i 张的小姐姐对 Compute 有 \(a_i\) 的吸引力。Compute 可以选择在这天换上 CSL 当天发给他的壁纸,并至少连续使用 \(a_i\) 天。

但我们都知道,每张壁纸的吸引力都会日益衰减,具体来说,当前壁纸每天对他的吸引力都会衰减 1。当衰减到 0 之后,Compute 就有可能换掉它,或者也有可能在之后的某天才换掉它,甚至不换一直用下去。

比如说,在第 1 天,CSL 发了一张吸引力为 2 的小姐姐壁纸给他并且他使用了这张壁纸;那么第 2 天,这张壁纸的吸引力就会减为 1 ,他肯定不会更换壁纸;但到了第 3 天,这张壁纸的吸引力减为 0,他可以选择更换为另一个壁纸或继续使用原来那张壁纸。

Compute 想知道,这 n 天他的桌面壁纸至少出现过两张不同的小姐姐的方案有多少种。

由于这个数可能很大,你只需要输出它对 \(10^9+7\) 取余后的结果即可。

输入描述

第一行有一个整数 \(n(2\leq n \leq 10^6) \),表示 CSL 给 Compute 发壁纸的天数。

第二行有 n 个整数 \(a_1, a_2, \ldots, a_n (0 \leq a_i \leq 100)\),分别表示第 i 天 CSL 给 Compute 发的小姐姐壁纸的吸引力为 \(a_i\)

输出描述

在一行输出一个正整数,表示 Compute 桌面壁纸至少出现过两张不同的小姐姐的方案数对 \(10^9+7\)

取余后的结果。

样例

输入样例1

输出样例1

说明

对于第一个样例,Compute 有两种更换壁纸的方案:第 1 天和第 2 天换壁纸;第 1 天和第 3 天换壁纸。

输入样例2

输出样例2

输入样例3

输出样例3

输入样例4

输出样例4

输入样例5

输出样例5

备注

Compute 可以在 CSL 发完壁纸的 n 天后继续使用他所正在使用最后的一张壁纸。

题解

线段树优化dp。

代码

 


In case I don't see you, good afternoon, good evening and good night.