canuc80k5524·25/50

Chuỗi Cổng Khởi Động Lại

Nộp bài trên LQDOJ

Bài 55 · Probability

Một hệ thống gồm cổng kiểm tra, đánh số từ đến . Ban đầu, cổng cần vượt qua là cổng .

Mỗi ngày, hệ thống kiểm tra đúng một cổng. Khi đang ở cổng , phép kiểm tra thành công với xác suất :

  • nếu thành công và , ngày hôm sau chuyển sang cổng ;
  • nếu thành công tại cổng , quá trình kết thúc;
  • nếu thất bại tại bất kỳ cổng nào, ngày hôm sau quay lại cổng .

Các kết quả kiểm tra ở những ngày khác nhau độc lập với nhau. Hãy tính kỳ vọng số ngày từ lúc bắt đầu cho đến khi vượt qua toàn bộ cổng.

Giả sử kỳ vọng viết dưới dạng phân số tối giản , với . Hãy in số nguyên duy nhất thỏa mãn

Input

  • Dòng đầu chứa số nguyên - số cổng kiểm tra.
  • Dòng thứ hai chứa số nguyên ; là xác suất thành công tại cổng .

Output

  • In một số nguyên - giá trị modulo của kỳ vọng theo định nghĩa trên.

Constraints

  • .
  • với mọi .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3
100 50 100

Output

5

Giải thích: Gọi là kỳ vọng số ngày để vượt hai cổng đầu; ta có , nên . Cổng cuối luôn thành công và cần thêm đúng một ngày, vì vậy đáp án là .

Lời giải tóm tắt
  • Hướng giải: Gọi E_i là kỳ vọng số ngày để vượt qua i cổng đầu tiên, luôn bắt đầu từ cổng 1. Đặt E_0 = 0.
  • Hướng giải: Xét lần thử cổng i. Trước khi hỏi cổng này, ta cần kỳ vọng E_{i-1} ngày để vượt lại các cổng trước, rồi dùng thêm một ngày cho phép kiểm tra hiện tại. Đặt
  • Hướng giải:

text q_i = p_i / 100. - Hướng giải: Nếu cổng i thành công thì prefix 1..i đã hoàn tất. Nếu thất bại, quá trình trở về đúng trạng thái ban đầu của E_i. Vì thế - Hướng giải:

text E_i = E_{i-1} + 1 + (1-q_i)E_i. - Hướng giải: Chuyển vế cho ta - Hướng giải:

text E_i = (E_{i-1}+1) / q_i. - Hướng giải: Duyệt các cổng theo thứ tự và cập nhật giá trị trên. Trong trường modulo, - Hướng giải:

text 1/q_i = 100 * p_i^(-1) (mod 998244353). - Hướng giải: Do 1 <= p_i <= 100, mọi p_i đều khác 0 theo modulo và có nghịch đảo. Ta tiền xử lý nghịch đảo của 1..100 rồi xử lý toàn bộ dãy trong thời gian tuyến tính. - Chứng minh đúng: Ta chứng minh bằng quy nạp rằng sau khi xử lý cổng i, biến expected bằng E_i. - Chứng minh đúng: Với i=0, chưa cần ngày nào nên E_0=0, đúng với giá trị khởi tạo. - Chứng minh đúng: Giả sử giá trị đã đúng cho E_{i-1}. Một chu kỳ thử cổng i luôn tốn kỳ vọng E_{i-1}+1 ngày. Sau chu kỳ đó, với xác suất q_i ta hoàn tất prefix i; với xác suất 1-q_i ta quay về trạng thái ban đầu và còn kỳ vọng E_i ngày. Do đó phương trình kỳ vọng ở trên là đúng và phép cập nhật tính chính xác E_i. - Chứng minh đúng: Theo quy nạp, sau cổng n, giá trị in ra bằng E_n, chính là đáp án. - Độ phức tạp: Tiền xử lý 100 nghịch đảo mất O(100 log MOD). Phần chính dùng O(n) thời gian và O(1) bộ nhớ ngoài input.