您的位置:首页 > 其它

【NOIP2016提高A组模拟9.4】幻象

2016-09-05 20:32 295 查看

题目

Description

phantom是一位爱思考的哲♂学家。

最近phantom得到了森の妖精的真传。在他练功的时候, 每秒他的思绪中都有一定的概率浮现出奇♂异的幻象,持续x秒的幻象将产生 的幻象值。

phantom练功发自真心,他想知道,在N秒内他期望产生的幻象值是多少。

Input

第一行包含 1 个正整数 N ,表示总时间 N 秒。

第二行包含 N 个用空格隔开的在[0,100]之间的正整数,其中第i个数a[i]表示第i秒浮现幻象的概率为百分之a[i]。

Output

1 个实数,四舍五入后保留一位小数,表示期望幻象值。

Sample Input

3

50 50 50

Sample Output

2.8

Data Constraint

对于 40%的数据 N ≤ 10

对于 60%的数据 N ≤ 100

对于 100%的数据,N ≤ 10^6

数据规模较大,请使用效率较高的读入方式。

题目の大意

这道题看的我整个人都懵逼了,完全不理解什么意思,比赛后才知道持续x秒的幻象将产生x^2的幻象值,那么就是每一秒都可能持续上一秒的幻想或者什么都不想,求期望值

比赛时の想法

题目都看不懂怎么做QAQ

正解

首先我们可以设l[i]表示第i秒幻象持续时间的期望,那么l[i]显然是等于(l[i-1]+1)*a[i]/100的。

然后我们设f[i]为第i秒的期望答案,f[i]=f[i−1]+((l[i−1]+1)2−(l[i−1])2)∗a[i]/100

然而我并不理解为什么是这样

贴代码

var
f,l:array[0..1000005]of extended;
a:array[0..1000005]of longint;
i,j,k,n:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln;
for i:=1 to n do l[i]:=(l[i-1]+1)*a[i]/100;
for i:=1 to n do f[i]:=f[i-1]+(sqr(l[i-1]+1)-sqr(l[i-1]))*a[i]/100;
writeln(f
:0:1);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: