Đề thi IOI 2003 - Amazing Robots Bài toán: Những Robot kỳ lạ (Amazing robots) Bạn là chủ nhân của hai Robot được đặt trong hai mê cung hình chữ nhật khác nhau. Ô (1,1) trong từng mê cung là ô vuông ở góc trái − trên hay góc tây − bắc. Mê cung i (i=1,2) có một tập hợp Gi (0≤Gi≤10) lính canh nhằm cố gắng chặn bắt các Robot bằng cách đi tuần trên những đường thẳng. Nhiệm vụ của bạn là xác định một tập hợp các lệnh sao cho các Robot thoát khỏi mê cung mà không bị lính canh bắt giữ. Tại thời điểm bắt đầu mỗi phút, bạn phát đi cùng một lệnh đến cả hai Robot. Mỗi lệnh chỉ ra hướng di chuyển (bắc, nam, đông, tây). Mỗi Robot di chuyển một ô theo hướng của lệnh, trừ khi Robot va phải tường, trong trường hợp này Robot không di chuyển tại phút đó. Robot thoát khỏi mê cung bằng cách đi ra khỏi mê cung đó. Robot bỏ qua lệnh sau khi nó đã thoát khỏi mê cung. Các lính canh di chuyển một ô lúc bắt đầu từng phút, cùng thời điểm như các Robot. Mỗi lính canh xuất phát tại một ô nhất định, quay mặt theo hướng di chuyển và đi về phía trước một ô trong một phút cho đến khi đi đến ô cuỗi của quãng đường đi tuần. Sau đó lính canh quay trở lại và di chuyển theo chiều ngược lại về ô xuất phát, tại đó anh ta quay lại và tiếp tục tuần tra cho đến khi robot đã thoát khỏi mê cung. Các lính canh sẽ không phải đi qua tường hay ra ngoài mê cung. Mặc dù các đường tuần tra có thể chồng lên nhau nhưng không có hai lính canh nào va vào nhau khi di chuyển, họ cũng không bao giờ đến cùng một ô cùng lúc, họ cũng không đổi chỗ cho nhau trong cùng một phút. Các lính canh trong một mê cung không xuất phát tại cùng một ô như Robot của mê cung đó. Lính canh bắt được robot nếu nó di chuyển đến cùng một ô như robot trong cùng một phút, hoặc nếu lính canh và robot đổi chỗ cho nhau trong một phút. Cho hai mê cung (kích thước không vượt quá 20x20) và các ô xuất phát của robot, đường tuần tra của lính canh trong mỗi mê cung. Hãy xác định một tập hợp các lệnh theo đó các Robot sẽ thoát khỏi mê cung. Thời gian nhỏ nhất là thời gian Robot cuối cùng thoát khỏi mê cung. Nếu các Robot ra khỏi mê cung ở những thời điểm khác nhau, thời điểm Robot đầu thoát ra không có ý nghĩa. INPUT: ROBOTS.IN Tập hợp các dòng đầu tiên miêu tả mê cung thứ nhất cùng các trạng thái của nó. Tập hợp các dòng tiếp theo miêu tả mê cung thứ hai và các trạng thái của nó. - Dòng thứ nhất bao gồm hai số nguyên R1, C1 cách nhau bởi dấu trống, cho biết số dòng và số cột của mê cung 1 - Tiếp theo R1 dòng bao gồm C1 ký tự chỉ ra cấu tạo của mê cung. Vị trí của Robot được cho bởi ký tự ″X″. Dấu ″. ″ biểu thị một ô trống, dấu ″#″ biểu thị một bức tường. Mỗi mê cung chỉ chứa một Robot. - Sau cấu tạo của mê cung là một dòng chứa một số nguyên G1 chỉ số lính canh của mê cung thứ nhất (0≤G1≤10). - Tiếp sau đó là G1 dòng miểu tả đường đi tuần của lính canh bao gồm 3 số nguyên và một ký tự. Hai số nguyên đầu tiên cho biết tọa độ hàng, cột ô xuất phát của lính canh. Số nguyên thứ 3 chỉ ra số ô (2 4) trên đường tuần tra. Ký tự cuối cùng cho biết hướng quay mặt ban đầu của lính canh: ″N″, ″S″, ″E″, ″W″(bắc, nam, đông, tây). Các miêu tả cho mê cung thứ hai tương tự như đối với mê cung thứ nhất. Output: Robots.out Dòng đầu tiên của tệp output bao gồm một số nguyên K (K≤10000) cho biết số lệnh để cả hai Robot ra khỏi mê cung. Nếu tồn tại các lệnh như vậy, số lệnh ít nhất không vượt quá 10000. Tiếp theo là K dòng liệt kê các lệnh, mỗi dòng một lệnh và là một trong 4 ký tự ″N″, ″S″, ″E″, ″W″. Nếu không tìm được tập hợp lệnh, in ra một dòng duy nhất chứa ″-1″. Cả hai Robot cần thoát khỏi mê cung ở cuối các lệnh. Lệnh cuối cùng sẽ làm cho ít nhất một Robot thoát khỏi mê cung chứa nó. Nếu nhiều lệnh làm cho Robot ra khỏi mê cung trong thời gian nhỏ nhất, chúng đều được chấp nhận. i> Ví dụ input: 5 4 #### #X.# # # # ##.# 1 4 3 2 W 4 4 #### # #X.# #### 0 Hình minh hoạ output: 8 X G X N S E W Hạn chế: Thời gian chạy chương trình là 2 giây. Bộ nhớ: 64MB Cho điểm: Nếu không tồn tại các lệnh di chuyển, bạn không được điểm. Ngược lại, điểm cho như sau: Độ chính xác: 20% số điểm Tệp output cho mỗi bộ test là hợp lệ nếu nó đúng định dạng, không chứa nhiều hơn 10000 lệnh và các lệnh cho phép Robot ra khỏi mê cung. Lệnh cuối cùng cho phép ít nhất một Robot ra khỏi mê cung. Độ tối ưu: 80% số điểm Tệp output của mỗi bộ test được xem như tối ưu nếu nó hợp lệ và không có chuỗi lệnh nào ngắn hơn nữa hợp lệ. Một chương trình mà chuỗi lệnh không tối ưu sẽ nhận 0 điểm cho độ tối ưu. . Đề thi IOI 2003 - Amazing Robots Bài toán: Những Robot kỳ lạ (Amazing robots) Bạn là chủ nhân của hai. mê cung chứa nó. Nếu nhiều lệnh làm cho Robot ra khỏi mê cung trong thời gian nhỏ nhất, chúng đều được chấp nhận. i> Ví dụ input: 5 4 #### #X.# # # # ##.# 1 4 3 2 W 4 4 ####