链接:https://ac.nowcoder.com/acm/contest/13504/I 来源:牛客网
众所周知,一个序列拥有许多非空子序列。
所谓子序列就是在原序列中任意删除 0 个或多个元素,然后保持剩下元素的顺序不变所形成的序列。非空子序列集意味着剩下的子序列不能为空。
比如对于序列[1, 2, 3],它的所有非空子序列为:[1, 2, 3],[1, 2],[1, 3],[2,
3],[1],[2],[3]。再比如序列 [1, 1],它的非空子序列有:[1, 1],[1] (删除了第一个 1),[1]
(删除了第二个1) 。现在母牛哥手里有一个长度为 n
的正整数序列,他现在要为这个序列的所有非空子序列打分。对于一个序列而言,它的评分标准为序列里所有数的乘积(只有一个数的序列,分数就是这个数)。母牛哥想要知道所有分数的和,但由于结果太大了,所以你只要告诉母牛哥结果对 1000000007 取模即可。
数学结论
定义“集合的乘积”为集合中所有元素的乘积,集合中所有子集的“集合的乘积”之和Sum
Sum = 数组每一项-1的值,n项乘积之和-1
注意对mod取模
结论和推导过程参考:
[https://blog.csdn.net/SCUEC__zhazhahui/article/details/108110714]
AC代码:
#include<