Bai toan 1-99
1. Cửa hàng bán hoa
Bài toán
Tại một cửa hàng người ta muốn cắm một số loài hoa vào các chậu hoa nhỏ. Có tất cả F loại hoa
và V chậu hoa (F
<=
V). Các chậu hoa được đánh số từ 1 đến V và xếp theo thứ tự từ trái sang
phải. Mỗi loài hoa cũng được đánh số từ 1 đến F. Mỗi loài hoa chỉ được cắm vào một chậu hoa và
phải tuân theo điều kiện: với i < j, loại hoa i phải ở phía trái của loại hoa j, hay nói cách khác hoa i
được cắm ở chậu Vi và hoa j được cắm ở chậu Vj thì ta phải có Vi < Vj.
Ta có bảng hệ số thẩm mỹ của việc cắm hoa: Bảng Aij với 1
<=
i <= F , 1 <= j <= V có ý nghĩa:
Nếu loài hoa i được cắm vào chậu j thì đạt điểm thẩm mỹ Aij. Ví dụ ta có bảng hệ số thẩm mỹ sau
đây:
Yêu cầu bài toán là tìm một phương án cắm hoa sao cho đạt tổng số điểm thẩm mỹ lớn nhất.
Hạn chế kỹ thuật
•
1 <= F <= 100 với F là số các loài hoa.
•
F <= V <= 100 với V là số các chậu hoa.
•
-50 <= Aij <= 50 với Aij là hệ số thẩm mỹ thu được khi loài hoa i cắm vào chậu hoa j.
Input
Đầu vào là file text có tên
flower.inp
•
Dòng đầu tiên ghi 2 số F,V
•
F dòng tiếp theo: mỗi dòng ghi V số nguyên, như- vậy số Aij là số ghi ở vị trí j tại dòng i +
1.
Output
Page 1
Bai Toan 3-99
3. Thành phố ngầm
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à 'O',
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à
move.
Hàm
look(dir)
với dir chỉ hướng bao gồm 'N', 'S', 'E' và 'W' chỉ ra các hướng Bắc, Nam, Đông,
Tây. Hàm này sẽ trả lại các giá trị 'O' hay 'W' nếu ô bên cạnh theo hướng dir có giá trị 'O' 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ưới. 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 'O' hoặc 'W' chỉ ra bản đồ của thành phố,
Output
Không cần dữ liệu ra file. 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ụ
Page 1
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.
Page 2
3
Trắc nghiệm
Chương trình của bạn chỉ được phép chạy trong 5 giây.
Để đạ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 tra. 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 place.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.
Page 3
Bai toan 2-99
2. Các mã ẩn
Bài toán
Xét tập các mã, mỗi mã là một từ có phân biệt chữ in hoa và chữ in thường chỉ bao gồm các chữ
cái tiếng Anh. Ta định nghĩa
dãy phủ
của một mã là xâu ký tự có chứa tất cả các chữ cái của mã
được xuất hiện đúng theo thứ tự và có ký tự đầu tiên và cuối cùng là của mã. Ví dụ
AuLvL
là dãy
phủ của
ALL
. Hai xâu con được gọi là
không gối chồng
lên nhau
nếu vị trí bắt đầu của xâu này
lớn hơn vị trí cuối của xâu kia hoặc ngược lại.
Cho trước một văn bản text và một tập hợp các mã. Một
nghiệm
của bài toán là một tập hợp các
phần tử, một phần tử bao gồm một mã và một dãy phủ của mã đó thoã mãn các điều kiện sau:
a) Các dãy phủ trên là không gối chồng lên nhau từng đôi một.
b) Mỗi dãy phủ có độ dài <=
1000
c) Tổng chiều dài của các mã trong nghiệm trên là cực đại.
Hạn chế kỹ thuật
•
1 <= N <= 100, N- số các mã
•
Độ dài lớn nhất của một mã là 100 ký tự
•
Văn bản có độ dài >= 1 và <= 1000000 ký tự
•
Ta nói dãy phủ C của mã W là
cực tiểu phải
nếu không có một xâu con trái (là xâu con bắt
đầu từ ký tự trái đầu tiên) thực sự nào của C là dãy phủ của W. Ví dụ
AAALAL
là
dãy
phủ cực tiểu phải
của
ALL
, trong khi đó
AAALALAL
là dãy phủ không cực tiểu phải
của
ALL
vì nó có xâu con trái thực sự
AAALAL
là dãy phủ.
Các điều kiện sau của văn bản phải thoả mãn:
1. Với mọi vị trí của văn bản, số các dãy phủ cực tiểu phải chứa vị trí này không vượt quá
2500;
2. Số các dãy phủ cực tiểu phải không vượt quá 10000.
Input
Có hai file text:
words.inp
và
text.inp
. File words.inp chứa danh sách các mã, file text.inp chứa
văn bản.
•
Dòng đầu tiên của words.inp chứa số N. N dòng tiếp theo chứa các mã là một xâu ký tự
không chứa dấu cách. Mỗi mã được đánh dấu từ 1 đến N tuân theo thứ tự được cho trong