列表

详情


NC220368. 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 取模即可。

输入描述

第一行为 n,表示这个序列长度为 n (1 <= n <= 10^6)。

接下来的一行有 n 个数字 a1, a2, …… , an (1 <= ai <= 2 * 10^9) 表示序列的 n 个数字。


输出描述

一个非负整数,表示结果对 1000000007 取模。

示例1

输入:

3
1 2 3

输出:

23

示例2

输入:

2
1 1

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3 解法, 执行用时: 604ms, 内存消耗: 134000K, 提交时间: 2023-08-12 15:18:48

n = int(input())
a = list(map(int, input().split()))
res = 1
for i in range(0, n):
    res *= (a[i] + 1)
    res %= 1000000007
print(int((res - 1) % 1000000007))

Python3(3.9) 解法, 执行用时: 550ms, 内存消耗: 118324K, 提交时间: 2021-03-28 09:39:33

n=int(input())
ans=1
mod=1000000007
a=list(map(int,input().split(" ")));
for i in range(0,n):
    ans=(ans%mod*(a[i]+1)%mod)%mod
    pass
ans-=1
print(ans%mod)

C++(clang++11) 解法, 执行用时: 322ms, 内存消耗: 412K, 提交时间: 2021-03-27 21:53:24

#include <iostream>
long long n,r,x;int main(){std::cin>>n;while(n--){std::cin>>x;r=(r*(1+x)+x)%(int)(1e9+7);}std::cout<<r;}

上一题