Lập trình băng giấy
Đề bài
Mô tả
Xét một ngôn ngữ lập trình đơn giản, trong đó mỗi chương trình là một dãy không rỗng gồm các ký tự "<", ">" và các chữ số.
Bộ thông dịch của ngôn ngữ hoạt động dựa trên một con trỏ lệnh gồm hai phần:
- Con trỏ ký tự hiện tại (CP) — chỉ tới một ký tự trong dãy.
- Con trỏ hướng (DP) — có thể trỏ sang trái hoặc phải.
Ban đầu CP trỏ tới ký tự ngoài cùng bên trái của dãy, còn DP trỏ sang phải.
Ta lặp lại các bước sau cho đến thời điểm đầu tiên mà CP trỏ ra ngoài dãy:
- Nếu CP đang trỏ vào một chữ số, bộ thông dịch in chữ số đó ra, sau đó CP dịch một bước theo hướng của DP. Sau khi dịch, giá trị của chữ số vừa in trong dãy giảm đi . Nếu chữ số vừa in là thì nó không thể giảm thêm, nên ký tự đó bị xóa khỏi dãy và độ dài dãy giảm đi .
- Nếu CP đang trỏ vào "<" hoặc ">", DP đổi hướng tương ứng thành trái hoặc phải. Sau đó CP dịch một bước theo DP. Nếu ký tự mới mà CP trỏ tới cũng là "<" hoặc ">" thì ký tự trước đó (ký tự vừa rời khỏi) bị xóa khỏi dãy.
Khi CP đi ra ngoài dãy, chương trình kết thúc. Có thể chứng minh mọi chương trình trong ngôn ngữ này đều kết thúc sau hữu hạn bước.
Cho dãy gồm các ký tự "<", ">" và chữ số. Bạn cần trả lời truy vấn. Mỗi truy vấn cho hai số và và hỏi: nếu chạy dãy con như một chương trình độc lập theo ngôn ngữ trên thì mỗi chữ số được in ra bao nhiêu lần.
Dữ liệu vào
- Dòng đầu chứa hai số nguyên và — độ dài dãy và số truy vấn.
- Dòng thứ hai chứa dãy gồm các ký tự "<", ">" và chữ số (0..9), viết liền nhau không có dấu cách.
- dòng tiếp theo, mỗi dòng chứa hai số nguyên và — truy vấn thứ .
Dữ liệu ra
Với mỗi truy vấn, in ra số nguyên cách nhau bởi dấu cách: , trong đó là số lần bộ thông dịch in ra chữ số khi chạy chương trình tương ứng. In đáp án theo đúng thứ tự các truy vấn.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 7 4 1>3>22< 1 3 4 7 7 7 1 7 |
0 1 0 1 0 0 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 2 1 0 0 0 0 0 0 |
Truy vấn 1 chạy "1>3": in 1 rồi 3, mỗi số một lần. Truy vấn 3 chạy "<": gặp ngay ký tự hướng, CP dịch ra ngoài nên không in gì. |
| 1 1 0 1 1 |
1 0 0 0 0 0 0 0 0 0 | Chạy "0": in 0 một lần (nên ), CP dịch sang phải ra ngoài dãy, kết thúc. |
Bình luận