P1654 OSU!
有:((x+1)^3=x^3+3x^2+3x+1)
注意,(len) 有两种改变方式:(0) 或 (len+1) ,(ans_1) 有两种改变方式:(ans_1+2 imes len+1) 或 (0) 。
而 (ans_2) 也有两种:(ans_2+0) 或 (ans_2+3 imes ans_2+3 imes len+1) 。
注意,这里 (ans_2) 需要累积答案所以不太一样。而 (ans_1) 不需要累计答案。
#include<bits/stdc++.h>
#define dd double
#define ld long double
#define ll long long
#define uint unsigned int
#define ull unsigned long long
#define N 100010
#define M number
using namespace std;
const int INF=0x3f3f3f3f;
template<typename T> inline void read(T &x) {
x=0; int f=1;
char c=getchar();
for(;!isdigit(c);c=getchar()) if(c == '-') f=-f;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
x*=f;
}
int n;
dd p[N],ans1,ans2;
int main(){
read(n);for(int i=1;i<=n;i++) scanf("%lf",&p[i]);
dd len=0;
for(int i=1;i<=n;i++){
ans2+=p[i]*(3*ans1+3*len+1);
ans1=p[i]*(ans1+2*len+1);
len=p[i]*(len+1);
}
printf("%0.1lf
",ans2);
return 0;
}