题目链接:http://codeforces.com/contest/1009/problem/E
解题心得:
- 一个比较简单的组合数学,还需要找一些规律,自己把方向想得差不多了但是硬是找不到规律,还是看了大佬博客才知道的规律。这个题要预先处理2的n次方,不然快速幂也会TLE。
- 推荐两个大佬的博客:
- https://blog.****.net/u010746456/article/details/81057082
- https://blog.****.net/hyp1231/article/details/81061186
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+;
const long long MOD = ;
typedef long long ll;
ll num[maxn], pow2[maxn];
ll n; void get_pow2(){
pow2[] = ;
for(int i=;i<=n;i++)
pow2[i] = (pow2[i-] * ) % MOD;
} void init() {
scanf("%lld",&n);
for(ll i=;i<=n;i++) {
scanf("%lld",&num[i]);
}
get_pow2();
} void solve(){
ll ans = ;
for(ll i=;i<=n;i++){
ll temp;
if(i == n)
temp = ;
else
temp = pow2[n-i] + pow2[n-i-]*(n-i);
temp %= MOD;
ans += temp*num[i];
ans %= MOD;
}
printf("%lld\n",ans);
} int main() {
init();
solve();
return ;
}