- .LCN với chương trình LOGO, PAS với chương trình PASCAL
3. Thành phố ngầm Bài toán
• • Các dòng tiếp theo mỗi dòng là phần tử của nghiệm. Mỗi dòng bao gồm ba số tự nhưiên i, s, ẹVới i là số thứ tự mã, s,e là vị trí đầu và cuối của dãy phủ tơng ứng của mã này trong văn bản. Thứ tự các hàng này không quan trọng.
Ví dụ words.inp 4 RuN RaBbit HoBbit StoP codes.out 12 2 9 21 1 4 7 1 24 28 text.inp StXRuYNvRuHoaBbvizXztNwRRuuNNP
(Chú ý: Đoạn mã ẩn thu được từ văn bản trên sẽ là "RuN RaBit RuN". (Một phương án khác có thể là "RuN HoBbit RuN"). Đoạn mã này không thể hiện ra ở output.)
Trắc nghiệm
Chương trình của bạn chỉ được chạy trong 10 giâỵ
3. Thành phố ngầmBài toán Bài toán
Bản đồ một thành phố ngầm được biểu diễn bởi một lưới ô vuông. Các ô vuông mở ký hiệu là 'Ó, các ô vuông tường ký hiệu là 'W'. Bạn sẽ xuất phát tại một vị trí được gọi bởi thủ tục (hàm số) start. Bạn sẽ phải tìm hiểu và di chuyển trong thành phố bởi hai thủ tục (hàm số) look và movẹ Hàm look(dir) với dir chỉ hướng bao gồm 'N', 'S', 'É và 'W' chỉ ra các hướng Bắc, Nam, Đông, Tâỵ Hàm này sẽ trả lại các giá trị 'Ó hay 'W' nếu ô bên cạnh theo hướng dir có giá trị 'Ó hay 'W'. Bạn sẽ dùng thủ tục move(dir) để chuyển động sang các ô vuông bên cạnh của lướị Tất nhiên bạn chỉ được phép đi vào các ô vuông mở. Nhiệm vụ của bài toán là phải tìm ra vị trí xuất phát ban đầu của bạn sau ít lần sử dụng hàm look nhất. Khi đã tìm thấy bạn phải thông báo chúng bằng cách gọi thủ tục finish (x,y) với x, y là toạ độ của vị trí tìm được.
Hạn chế kỹ thuật
• • 3 <= U <= 100, U - chiều rộng của bản đồ.
• • 3 <= V <= 100, V - chiều cao của bản đồ tính theo các ô vuông. • • Thành phố được bao phủ xung quanh bởi tường.
• • Vị trí trái dưới có toạ độ (1,1) và phải trên là (U,V)
Input
Dữ liệu đầu vào là file text under.inp - Dòng đầu tiên ghi 2 số U,V
- V dòng tiếp theo, mỗi dòng là U ký tự bao gồm 'Ó hoặc 'W' chỉ ra bản đồ của thành phố,
Output
Không cần dữ liệu ra filẹ Chương trình phải kết thúc bằng cách gọi thủ tục (hàm)
finish(x,y).
Ví dụ
Hướng dẫn cho chương trình Pascal
Bạn phải có dòng sau trong chương trình: uses undertpu;
Unit này chứa các hàm và thủ tục sau: Procedure start; {cần phải gọi đầu tiên} function look(dir: char):char;
procedure move(dir:char);
procedure finish(x,y:integer); {phải gọi cuối cùng }
Hướng dẫn cho chương trình C/C++
Bạn phải có dòng sau trong chương trình: #include "under.h"
Tệp này chứa các hàm sau:
void start(void); /* cần phải gọi đầu tiên */ char look(char);
void move(char);
void finish(int, int); /* phải gọi cuối cùng */
Khi tạo project có tên under, bạn phải bổ sung vào project chương trình của bạn và thư viện các tương tác với tên underobj.obj. Chú ý nên sử dụng mô hình bộ nhớ LARGE để dịch chương trình.
Trắc nghiệm
Chương trình của bạn chỉ được phép chạy trong 5 giâỵ
Để đạt được điểm tối đa A, số các lần gọi hàm look, x, của chương trình cần phải nhỏ hơn hoặc bằng M là số đa ra bởi chương trình kiểm trạ Chú ý rằng M được chọn lớn hơn
minimum. Số M được chọn không phụ thuộc vào hướng và thứ tự của việc tìm kiếm. Bạn có thể đạt điểm khi số lần gọi hàm look lớn hơn M nhưng nhỏ hơn 2M. Số điểm đạt được sẽ là tròn số của công thức sau đây:
Các lỗi khác do chương trình tạo ra đều sẽ bị 0 điểm.
Thử nghiệm chương trình
Để chạy thử chương trình, bạn hãy tạo một text file có tên placẹtxt bao gồm một dòng có chứa tọa độ của một vị trí trên bản đồ. Bạn hãy chạy chương trình và xem kết quả trong tệp result.txt. File result.txt chứa hai dòng, dòng đầu tiên ghi hai toạ độ x và y để gọi thủ tục finish(x,y). Dòng thứ hai ghi dòng chữ "You used look nnn times" (Bạn đã dùng hàm look nnn lần). Chú ý rằng việc thử này chỉ kiểm tra tính tương thích của chương trình với các thư viện được tạo ra chứ tuyệt nhiên không liên quan gì đến lời giải thực sự của bài toán.