【NOIP2016提高A組模擬9.4】幻象
阿新 • • 發佈:2019-02-04
題目
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秒的期望答案, [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[n]:0:1);
end.