Olympic chuyên KHTN 2024 - Fibo

Xem dạng PDF

Gửi bài giải

Điểm: 90,00 (OI)
Giới hạn thời gian: 3.0s
Giới hạn bộ nhớ: 1G
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Output Only, Pascal, PyPy, Python, Scratch, TEXT

Trong trường hợp đề bài hiển thị không chính xác, bạn có thể tải đề bài tại đây: Đề bài

Cho hai xâu kí tự ~a~, ~b~ và ~10^{18}~ xâu ~f_1, f_2, \dots, f_{10^{18}}~. Ban đầu ta có ~f_1 = a~, ~f_2 = b~, ~f_i = f_{i-2} + f_{i-1}~ với mọi ~3 \le i \le 10^{18}~ (phép '+' là phép nối xâu, ví dụ "abc" ~+~ "defg" ~=~ "abcdefg"). Gọi thao tác sau đây là thao tác ~X~:

  • Gán ~f_1 = a~, ~f_2 = b~. Với mọi ~i~ từ ~3~ đến ~10^{18}~, ta gán ~f_i = f_{i-2} + f_{i-1}~.

Đặt ~|S|~ là độ dài xâu ~S~, ~S_i~ là kí tự thứ ~i~ của xâu ~S~ ~(1 \le i \le |S|)~. Bạn cần phải xử lí ~q~ truy vấn, mỗi truy vấn thuộc ~1~ trong ~4~ loại sau đây:

  • Loại ~1~: Cho ~2~ số nguyên dương ~i, x~. Cho biết kí tự ~f_{i_x}~.

  • Loại ~2~: Cho ~3~ số nguyên dương ~i, l, r~ và một kí tự ~\theta~. Cho biết trong các kí tự ~f_{i_l}, f_{i_{l+1}}, \dots, f_{i_r}~ có bao nhiêu kí tự là ~\theta~?

  • Loại ~3~: Cho ~2~ số nguyên dương ~l, r~ và một kí tự ~\theta~. Gán các kí tự ~a_l, a_{l+1}, \dots, a_r~ bằng ~\theta~.

  • Loại ~4~: Cho ~2~ số nguyên dương ~l, r~ và một kí tự ~\theta~. Gán các kí tự ~b_l, b_{l+1}, \dots, b_r~ bằng ~\theta~.

Sau mỗi truy vấn loại ~3~ hoặc ~4~, ta thực hiện lại thao tác ~X~ ở trên. Hãy giải bài toán này.

Input

Gồm ~q + 3~ dòng, trong đó:

  • Dòng đầu tiên gồm xâu kí tự ~a~ ~(1 \le |a| \le 10^6)~. Các kí tự của ~a~ chỉ nằm trong tập các chữ cái Latin in thường.

  • Dòng thứ ~2~ gồm xâu kí tự ~b~ ~(1 \le |b| \le 10^6)~. Các kí tự của ~b~ chỉ nằm trong tập các chữ cái Latin in thường.

  • Dòng thứ ~3~ gồm duy nhất số nguyên dương ~q~ ~(1 \le q \le 10^5)~.

  • ~q~ dòng tiếp theo, mỗi dòng mô tả một truy vấn. Trong đó:

    • Truy vấn loại ~1~ có dạng 1 i x ~(1 \le i \le 10^{18},\ 1 \le x \le \min(|f_i|, 10^{18}))~.

    • Truy vấn loại ~2~ có dạng 2 i l r θ ~(1 \le i \le 10^{18},\ 1 \le l \le r \le \min(|f_i|, 10^{18}))~, ~\theta~ là kí tự nằm trong tập các chữ cái Latin in thường.

    • Truy vấn loại ~3~ có dạng 3 l r θ ~(1 \le l \le r \le |a|)~, ~\theta~ là kí tự nằm trong tập các chữ cái Latin in thường.

    • Truy vấn loại ~4~ có dạng 4 l r θ ~(1 \le l \le r \le |b|)~, ~\theta~ là kí tự nằm trong tập các chữ cái Latin in thường.

Output

Với mỗi truy vấn loại ~1~ và ~2~, in ra trên một dòng là kết quả của truy vấn tương ứng.

Scoring

Subtask Điểm Ràng buộc
1 ~5\%~ ~\lvert a\rvert, \lvert b\rvert \le 16~, ~q \le 1000~. Với mọi truy vấn loại ~1~ và loại ~2~, ~i \le 16~.
2 ~15\%~ ~\lvert a\rvert, \lvert b\rvert \le 1000~, ~q \le 1000~.
3 ~20\%~ Không có truy vấn loại ~3~ và loại ~4~.
4 ~20\%~ Với mọi truy vấn loại ~3~ và loại ~4~, ~l = r~.
5 ~20\%~ ~\lvert a\rvert, \lvert b\rvert \le 10^5~.
6 ~20\%~ Không có giới hạn gì thêm.

Sample Input 1

abc
cb
6
1 5 11
2 4 2 7 b
3 1 2 d
4 2 2 c
1 5 9
2 6 7 18 c

Sample Output 1

c
3
d
8

Notes

Giải thích test ví dụ:

  • Ở truy vấn đầu tiên, ta có ~f_5 =~ "abccbcbabccb". Kí tự thứ ~11~ của ~f_5~ là 'c'.

  • Ở truy vấn thứ ~2~, ta có ~f_4 =~ "cbabccb". Trong đoạn "babccb" có ~3~ kí tự là 'b'.

  • Ở truy vấn thứ ~3~, ta biến đổi xâu ~a =~ "ddc".

  • Ở truy vấn thứ ~4~, ta biến đổi xâu ~b =~ "cc".

  • Ở truy vấn thứ ~5~, ta có ~f_5 =~ "ddcccccddccc". Kí tự thứ ~9~ của ~f_5~ là 'd'.

  • Ở truy vấn cuối cùng, ta có ~f_6 =~ "ccddcccddcccccddccc". Trong đoạn "cddcccccddcc" có ~8~ kí tự là 'c'.


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.