Описание
В общей сложности \ (п \) контрольно - пропускные пункты, вы парафировать первое препятствие. К первому \ (я \) вероятность контрольных точек \ (P_i \) . Каждый раунд вы можете бросить вызов контрольной точки. Если в первых \ (я \) контрольных точек, то в первую \ (I + 1 \) контрольно - пропускных пунктов, или еще вернуться к первому \ (1 \) контрольно - пропускных пунктах. К первой \ (п \) контрольно - пропускных пунктах успех. Спросите , сколько раундов игра может рассчитывать на успех.
\ (1 \ п Leq \ 2 экв \ CDOT 10 ^ 5 \)
Решение
При условии , с \ (I \) й OFF OFF желательно мультипликационный \ (e_i \) . Очевидно , что
\ [e_i = p_i (Е- { + 1} + 1) + (1-p_i) (E_1 + 1) \]
В частности, \ (п-в Е- {} = 0. 1 + \) , и ответ \ (E_1 \) .
Тогда существует
\ [E_1 = p_1 (Е_2 + 1) + (1-p_1) (E_1 + 1) \ Rightarrow E_1 = \ гидроразрыва {1} {p_1} + Е_2 \]
Аналогично указанной выше формуле в потомстве
\ [Е_2 = P_2 (e_3 + 1) + (1-P_2) (Е_2 + 1) \ Rightarrow E_1 = \ гидроразрыва {1+ \ гидроразрыва {1} {p_1}} {p_2} + e_3 \]
Выведение ответ найден будет продолжен
\ [E_1 = \ гидроразрыва {1+ \ гидроразрыва {1+ \ гидроразрыва {1+ \ cdots} {р- {п-2}}} {{р- п-1}}} {p_n} \ ]
Код
#include <bits/stdc++.h>
using namespace std;
const int yzh = 998244353;
int quick_pow(int a, int b) {
int ans = 1;
while (b) {
if (b&1) ans = 1ll*ans*a%yzh;
b >>= 1, a = 1ll*a*a%yzh;
}
return ans;
}
int main() {
int ans = 0, p, n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &p);
ans = (ans+1)%yzh;
ans = 1ll*ans*100%yzh*quick_pow(p, yzh-2)%yzh;
}
printf("%d\n", ans);
return 0;
}