P1654 OSU!
P1654 OSU!
有:\((x+1)^3=x^3+3x^2+3x+1\)
注意,\(len\) 有两种改变方式:\(0\) 或 \(len+1\) ,\(ans_1\) 有两种改变方式:\(ans_1+2\times len+1\) 或 \(0\) 。
而 \(ans_2\) 也有两种:\(ans_2+0\) 或 \(ans_2+3\times ans_2+3\times 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\n",ans2);
return 0;
}