cf1009E:所望より困難私は段落に求めたが、各部分を個別に加算するように単独で各セグメントを見つけることが望ましいが、比較的容易であり、合計の
E [I] = 1/2 * A1 + 1/4 * A2 + ... + 1/2 ^(I-1)* AI-1 + 1/2 ^(I-1)* AI、E [1- n]は再帰的です
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineは長い長いっのconst int型 MAXN = 1E6 + 10 。 constの LL MOD = 998244353 ; int型のn; LL [MAXN]、DP [MAXN]、P [MAXN]。INT メイン(){ CIN >> N。 以下のために(int型私= 1 ; iが<= N; iが++)のscanf(" %のLLD "、および[I])。 P [ 0 ] = 1 。 以下のために(int型 I = 1 P [I] = P [1-; iが++; iが<= N) 1 ] * 2%のMOD。 DP [ 1 ] [= 1 ] * P [N- 1 ]%のMODと、 用(int型 I = 2 ; iが<= N iが++ ){ DP [I] =((DP [I- 1 ] -a [I- 1 ] * P [NI]%のMOD)MOD + MOD%)%MOD ; DP [I] =(DP [I] + [I] * P [NI]%のMOD)%MOD。 } LL ANS = 0 。 以下のために(int型私= 1 iが++; iが<= N ) ANS(ANS + DP [I])%= MOD。 COUT<< ANS << ' \ nを' ; }