QOJ.ac

QOJ

実行時間制限: 1.0 s メモリ制限: 1024 MB 満点: 100 ハック可能 ✓

#14513. Девушки-лошадки

統計

M. Девушка-лошадь

«Pretty Derby» — это игра про тренировку скаковых лошадей. Как заядлый любитель этой игры, вы должны показать отличные результаты на этапе ускорения, чтобы выиграть соревнование.

Ниже представлена упрощенная модель этапа ускорения: в начале этапа ускорения ваш персонаж должен увеличить скорость с $v_1$ до $v_2$. У вашего персонажа есть начальное ускорение $a_0$, и он может использовать навыки для дальнейшего увеличения ускорения.

У вас есть $n$ навыков ускорения. Для $i$-го навыка ускорение составляет $a_i$, длительность действия — $t_i$ единиц времени, а вероятность успешного применения — $p_i\%$. Для упрощения задачи будем считать, что если навык успешно применен, он вступает в силу немедленно в начале этапа ускорения. Кроме того, успешность применения навыков является независимой случайной величиной, то есть применение одного навыка не влияет на вероятность успеха другого.

Если $i$-й навык успешно применен, он обеспечивает дополнительное ускорение $a_i$ в течение следующих $t_i$ единиц времени; в противном случае он не оказывает никакого влияния. Когда скорость достигает $v_2$, ускорение немедленно прекращается, даже если некоторые навыки все еще действуют. Кроме того, чтобы избежать чрезмерного ускорения, вы установили верхний предел ускорения, равный $v_2 - v_1$. Таким образом, фактическое ускорение в любой момент времени равно: $\min(a_0 + \text{сумма ускорений всех успешно примененных навыков, действие которых еще не закончилось}, v_2 - v_1)$.

Теперь вы хотите узнать, каково ожидаемое время ускорения от $v_1$ до $v_2$ при соблюдении вышеуказанных правил.

Входные данные

Первая строка содержит четыре целых положительных числа $n, v_1, v_2, a_0$ ($1 \le n, v_1, v_2, a_0 \le 1000, v_1 < v_2$), обозначающих количество навыков, начальную скорость, конечную скорость и начальное ускорение соответственно.

Следующие $n$ строк содержат по три целых положительных числа $a_i, t_i, p_i$ ($1 \le a_i, t_i \le 1000, 0 \le p_i \le 100$), где $a_i$ — ускорение $i$-го навыка, $t_i$ — длительность его действия, а $p_i\%$ — вероятность успешного применения.

Выходные данные

Выведите одно целое число — ожидаемое время ускорения по модулю $998244353$.

Формально, пусть $M = 998244353$. Можно доказать, что точный ответ можно представить в виде несократимой дроби $\frac{p}{q}$, где $p$ и $q$ — целые числа и $q \not\equiv 0 \pmod M$. Вам нужно вывести $p \cdot q^{-1} \pmod M$, то есть такое целое число $x$, что $0 \le x < M$ и $qx \equiv p \pmod M$. Можно доказать, что такое $x$ единственно.

Примеры

Пример 1

1 20 32 2
1 4 50
5

Пример 2

2 20 30 1
100 1 10
1 1 10
828542822

Пример 3

1 1 10 1
4 10 50
199648876

Пример 4

1 1 5 6
5 2 30
1

Примечание

Пояснение к примеру 1

С вероятностью 50% навык успешно применяется, тогда для завершения ускорения требуется 4 единицы времени. С вероятностью 50% навык не применяется, тогда требуется 6 единиц времени. Таким образом, ожидаемое время ускорения составляет $\frac{1}{2} \times 4 + \frac{1}{2} \times 6 = 5$.

Пояснение к примеру 2

С вероятностью 10% успешно применяется первый навык, при этом ускорение достигает предела, поэтому требуется 1 единица времени. С вероятностью 9% успешно применяется второй навык, но не первый; второй навык действует только 1 единицу времени, поэтому требуется 9 единиц времени для завершения ускорения. С вероятностью 81% ни один из навыков не применяется, тогда требуется 10 единиц времени. Ожидаемое время ускорения составляет $\frac{901}{100}$. $100 \times 828542822 \equiv 901 \pmod{998244353}$, поэтому ответ — 828542822.

Пояснение к примеру 3

С вероятностью 50% навык успешно применяется, тогда требуется $\frac{9}{5}$ единиц времени. С вероятностью 50% навык не применяется, тогда требуется 9 единиц времени. Ожидаемое время ускорения составляет $\frac{1}{2} \times \frac{9}{5} + \frac{1}{2} \times 9 = \frac{27}{5}$. $5 \times 199648876 \equiv 27 \pmod{998244353}$, поэтому ответ — 199648876.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.