编程题
### 问题描述 话说在梁山水泊,宋江大哥为了让兄弟们在酒桌上比出个高下,决定来一场“酒量争霸赛”。这场比赛不比拳脚功夫,只比谁能喝得多,喝得久。 于是,$n$ 个好汉齐聚一堂,各个摩拳擦掌,准备展示自己的酒量。宋江大哥发话:“每位兄弟上场前,按照顺序报报自己的酒量,让大家心里有个数。” 于是,兄弟们依次按顺序报上了自己的初始酒量:$a_1, a_2, \ldots, a_n$。 接着,宋江大哥详细讲起了比赛的规则: 1. 每一轮开始前,所有兄弟先计算一下“累计酒量”,也就是这轮每个人要喝的酒量。具体来说,第 $i$ 个人这轮要喝的酒量 $b_i$ 是前面所有人的酒量之和: $$ b_i = a_1 + a_2 + \cdots + a_i $$ 这就意味着,越靠后的兄弟,这轮得喝的酒越多! 2. 喝完这一轮后,最靠前的的那位兄弟会被淘汰出局(即序列 $b$ 的第一个元素)。 3. 剩下的兄弟们继续喝下一轮。在下一轮中,大家的酒量数据在每轮结束后会更新成上一轮的累计酒量(即上一轮计算出来的累计酒量 $b$ 会成为下一轮的初始酒量 $a$)。接着,大家再重新计算各自这一轮要喝的酒量。 4. 如此这般,每轮淘汰掉一个兄弟,直到最后只剩下一位能喝的“酒霸”。 宋江大哥笑着说:“这位酒霸的最终酒量,也不知道会是多少。” 对此,请你计算,经过一轮轮“喝酒淘汰赛”,最终那位唯一的酒霸,他的酒量对 $10^9 + 7$ 取余会是多少呢? ### 输入格式 第一行包含一个整数 $n$ $(1 \leq n \leq 10^5)$,表示好汉的数量。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$ $(1 \leq a_i \leq 10^9)$,表示每位好汉的初始酒量。 ### 输出格式 输出一行,表示最终剩下的酒霸的酒量对 $10^9 + 7$ 取余的结果。 ### 样例输入 ```text 3 1 2 3 ``` ### 样例输出 ```text 9 ``` ### 样例说明 1. 第一轮: - 初始酒量:$a = [1, 2, 3]$ - 累计酒量:$b = [1, 3, 6]$ - 淘汰第一个:$1$ 2. 第二轮: - 更新酒量:$a = [3, 6]$ - 累计酒量:$b = [3, 9]$ - 淘汰第一个:$3$ 3. 第三轮: - 更新酒量:$a = [9]$ - 只有一人,结束。 最终酒霸的酒量为 $9$,输出结果为 $9$。
查看答案
赣ICP备20007335号-2