1. 程式人生 > >【NOIP2016提高A組模擬9.4】幻象

【NOIP2016提高A組模擬9.4】幻象

題目

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[i1]+((l[i1]+1)2(l[i1])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[n]:0:1); end.