[Codeforces 1265E] Прекрасные Зеркала

Описание

экзамен ссылка

В общей сложности \ (п \) контрольно - пропускные пункты, вы парафировать первое препятствие. К первому \ (я \) вероятность контрольных точек \ (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;
}

рекомендация

отwww.cnblogs.com/NaVi-Awson/p/11999959.html