[PreVOI 20] Bài 2: Simulation
Xem dạng PDFTrong 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
Bờm đang lập trình cho một cánh tay robot để có thể dùng phấn vẽ lên trên bảng đen, coi bảng đen là một mặt phẳng tọa độ chuẩn Oxy (trục Ox tăng từ trái sang phải, trục Oy tăng từ dưới lên trên).
Kế hoạch mô tả các thao tác thực hiện của cánh tay robot là một mảng gồm ~N~ vector ~(x_1, y_1), (x_2, y_2), \dots, (x_N, y_N)~, trong đó ~x_i~ và ~y_i~ là các số nguyên chẵn. Vận hành thực tế của cánh tay robot như sau: đầu tiên nó bắt đầu đặt viên phấn từ điểm (1, 1) và sau đó thực hiện ~N~ bước, ở bước thứ ~i~, cánh tay robot sẽ di chuyển viên phấn trên bảng từ điểm hiện tại ~(x, y)~ đến thẳng điểm ~(x + x_i, y + y_i)~. Ta có thể hình dung cánh tay robot đang vẽ một loại đường đứt đoạn trong mặt phẳng tọa độ, và các đoạn của đường đứt đoạn đó chính là các vector đã cho.
Trong khi Bờm đang nghĩ về cách thay đổi kế hoạch để thay đổi đường đứt đoạn mà robot có thể vẽ ra, anh ấy tự hỏi viên phấn sẽ đi qua các trục tọa độ bao nhiêu lần với đường robot sẽ vẽ ra với kế hoạch hiện tại. Do đó Bờm muốn có một chương trình mô phỏng quá trình thay đổi kế hoạch và trả lời các truy vấn số lần đi qua trục tọa độ với đường robot vẽ ra.
Giả sử kế hoạch mô tả các thao tác của robot chứa ~N~ vector là một mảng đánh số từ 1 đến ~N~. Ban đầu con trỏ của chương trình mô phỏng chỉ vào vị trí 1 của mảng này. Và chương trình mô phỏng cần thực hiện các lệnh sau:
- “B”: lùi con trỏ về vị trí trước vị trí hiện tại trong mảng (nếu vị trí hiện tại là ~i~ thì nó sẽ lùi về vị trí ~i - 1~, nếu ~i = 1~ thì nó giữ nguyên vị trí hiện tại).
- “F”: di chuyển con trỏ đến vị trí tiếp theo trong mảng (nếu vị trí hiện tại là ~i~ thì nó sẽ tiến đến vị trí ~i + 1~, nếu ~i = N~ thì nó giữ nguyên vị trí hiện tại).
- “C nx ny”: thay đổi vector của vị trí hiện tại của con trỏ trong mảng thành ~(nx, ny)~, với ~nx, ny~ cũng là những số nguyên chẵn.
- “Q”: trả lời câu hỏi của Bờm rằng với kế hoạch hiện tại thì đường robot sẽ vẽ ra có bao nhiêu lần đi qua trục tọa độ. Nếu đi qua gốc (0, 0) thì được tính là 2 lần đi qua trục tọa độ.
Yêu cầu: Hãy xây dựng chương trình mô phỏng nêu trên.
Input
- Dòng đầu tiên chứa số nguyên ~N~ (~1 \le N \le 10^5~).
- Tiếp theo là ~N~ dòng, mỗi dòng chứa hai số nguyên ~x_i~ và ~y_i~ (~|x_i|, |y_i| \le 500~).
- Dòng tiếp theo chứa số nguyên ~M~ là số thao tác truy vấn (~1 \le M \le 3 \times 10^5~).
- Tiếp theo là ~M~ dòng, mỗi dòng mô tả một trong 4 truy vấn trên (~|nx|, |ny| \le 500~).
Output
- Ghi ra nhiều dòng, mỗi dòng ứng với kết quả của truy vấn loại “Q”.
Sample Input 1
5
6 2
0 -6
-2 2
-6 -8
4 0
12
Q
C 4 4
Q
F
F
F
C -6 -2
Q
B
B
C -4 -6
Q
Sample Output 1
3
5
5
4
Bình luận