1-2000
1. Palindrome
Bài toán
Palindrome là một chuỗi đối xứng nghĩa là một chuỗi đọc giống nhau nếu ta bắt đầu từ trái sang
phải hay từ phải sang trái. Hãy viết chương trình từ một chuỗi cho trước xác định số ký tự ít nhất
được chèn vào chuỗi để được một palindrome.
Ví dụ, chèn 2 ký tự vào chuỗi "Ab3bd" có thể biến nó thành một palindrome ("dAb3bAd" hoặc
"Adb3bdA") nhưng chèn dưới 2 ký tự thì không thể biến chuỗi trên thành một Palindrome.
Input
Tệp input có tên là
PALIN.IN
. Dòng đầu tiên chứa 1 số nguyên chỉ độ dài của chuỗi
N
với
3<=
N
<=5000. Dòng thứ hai chứa 1 chuỗi ký tự có độ dài
N
. Chuỗi chỉ gồm các ký tự viết hoa từ
‘A’ đến ‘Z’, ký tự thường từ ‘a’ đến ‘z’ và các chữ số từ ‘0’ đến ‘9’. Các ký tự thường và ký tự
hoa được hiểu khác nhau.
Output
Tệp output có tên
PALIN.OUT
. Dòng đầu tiên chứa 1 số nguyên chỉ số ký tự ít nhất cần chèn bổ
xung.
Ví dụ
Input và Output
Page 1
5-2000
5. Walls
Bài toán
Ở một đất nước, các bức tường thành được xây dựng sao cho mỗi bức tường sẽ nối hai thành phố.
Các bức tường thành không cắt lẫn nhau. Do đó, đất nước này được chia thành các vùng mà khi
đi từ vùng này sang vùng khác thì phải đi qua một thành phố hoặc đi ngang qua tường thành. Với
2 thành phố bất kỳ A và B, có nhiều nhất một bức tường thành với một đầu ở thành phố A và một
đầu ở thành phố B và hơn nữa, có thể đi từ A đến B bằng cách đi qua một thành phố hoặc đi dọc
theo một bức tường thành.
Có một câu lạc bộ mà các thành viên của nó sống trong các thành phố. Trong mỗi thành phố có
thể có ít nhất một hoặc không có thành viên nào sống. Các thành viên muốn gặp nhau ở một trong
các vùng (bên ngoài các thành phố). Các thành viên đi bằng xe đạp. Họ không muốn vào các
thành phố vì tình hình giao thông và họ muốn đi qua số bức tường thành ít nhất. Để đến chỗ gặp
nhau, mỗi thành viên cần phải đi qua một số bức tường thành. Họ muốn tìm một vùng phù hợp
nhất với tổng số lần đi qua tường thành là nhỏ nhất.
Các thành phố được đánh số từ 1 đến
N
trong đó
N
là số thành phố. Trong hình 1, các nút được
đặt tên chỉ các thành phố và các đường nối các nút là các bức tường thành. Giả sử có ba thành
viên sống trong các thành phố 3, 6 và 9. Vùng phù hợp nhất để hội họp và các lộ trình tương ứng
cho các thành viên được minh họa trong hình 2. Tổng số lần đi qua tường thành là 2: thành viên
từ thành phố số 9 phải đi qua tường thành giữa thành phố 2 và 4, và thành viên từ thành phố 6
phải đi qua tường thành giữa thành phố 4 và 7.
Hãy viết chương trình từ các thành phố, các vùng và thành phố quê hương của các thành viên câu
lạc bộ, hãy xác định vùng phù hợp nhất cho hội họp với tổng số lần đi qua tường thành ít nhất.
Input
Tệp input có tên
WALLS.IN
. Dòng đầu tiên chứa 1 số nguyên chỉ số vùng
M
với 2<=
M
<=200.
Dòng thứ hai chứa 1 số nguyên chỉ số thành phố
N
với 3<=
N
<=250. Dòng thứ ba chứa 1 số
nguyên chỉ số thành viên câu lạc bộ
L
với 1<=
L
<=30,
L
<=
N
. Dòng thứ tư chứa
L
số nguyên khác
nhau theo thứ tự tăng dần chỉ tên các thành phố có thành viên câu lạc bộ sống.
Sau đó, tệp này chứa 2
M
dòng, mỗi cặp dòng tương ứng với 1 vùng: hai dòng đầu tiên trong số
2
M
dòng mô tả vùng đầu tiên, hai dòng đầu tiên mô tả vùng thứ hai, ... Trong mỗi cặp dòng, dòng
thứ nhất chỉ số thành phố
I
xung quanh vùng đó Dòng thứ hai chứa
I
số nguyên chỉ tên của
I
Page 1
2
thứ nhất chỉ số thành phố
I
xung quanh vùng đó. Dòng thứ hai chứa
I
số nguyên chỉ tên của
I
thành phố theo thứ tự đi qua khi đi theo chiều kim đồng hồ dọc theo biên giới vùng với ngoại lệ
sau. Vùng cuối cùng là “vùng ngoài” bao quanh tất cảc các thành phố và các vùng khác, và thứ tự
các thành phố theo hướng đi ngược chiều kim đồng hồ. Thứ tự các vùng được gán theo số
nguyên: vùng đầu tiên là 1, vùng thứ hai là 2, ... Chú ý, input chứa tất cả các vùng được tạo thành
từ các thành phố và tường thành gồm cả “vùng ngoài”.
Output
Tệp output có tên là
WALLS.OUT
. Dòng đầu tiên chứa 1 số nguyên chỉ số lần vượt qua ít nhất.
Dòng thứ hai chứa 1 số nguyên chỉ tên vùng phù hợp nhất cho hội họp. Có nhiều giải pháp,
chương tình chỉ cần báo cáo 1 giải pháp.
Ví dụ
Input và Output
Tệp input và output tương ứng với ví dụ trên.
Page 2
4-2000
4. Post Office
Bài toán
Có một tuyến đường cao tốc thẳng với nhiều làng mạc ở hai bên. Đường cao tốc được biểu diễn
bằng một trục nguyên và vị trí mỗi ngôi làng là một tọa độ nguyên trên trục. Hai làng bất kỳ
không ở cùng vị trí. Khoảng cách giữa hai vị trí là hiệu của hai tọa độ nguyên đó.
Bưu điện được xây dựng ở một số làng trong số đó. Ngôi làng và bưu diện ở làng dó có cùng vị
trí. Để xây dựng các bưu điện, phải chọn các vị trí của chúng sao cho tổng khoảng cách giữa mỗi
ngôi làng và bưu điện gần ngôi làng đó nhất là ngắn nhất.
Hãy viết chương trình từ vị trí một số ngôi làng và bưu điện cho trước tính tổng khoảng cách nhỏ
nhất có thể giữa mỗi ngôi làng với bưu điện gần ngôi làng đó nhất, đồng thời xác dịnh vị trí xây
dựng các bưu dđện.
Input
Tệp input có tên
POST.IN
. Dòng đầu tiên chứa 2 số nguyên: số thứ nhất chỉ số làng
V
với
1<=
V
<=300 và số thứ hai chỉ số bưu điện
P
với 1<=
P
<=30,
P
<=
V
. Dòng thứ hai chứa
V
số
nguyên theo thứ tự tăng dần.
V
số nguyên đó là vị trí các ngôi làng. Mỗi vị trí là
X
với
1<=
X
<=10000.
Output
Tệp output có tên
POST.OUT
. Dòng đầu tiên chứa một số nguyên
S
là tổng các khoảng cách
giữa mỗi ngôi làng với bưu điện gần ngôi làng đó nhất. Dòng thứ hai chứa
P
số nguyên theo thứ
tự tăng dần. Các số nguyên đó chỉ vị trí các ngôi làng khác nhau sẽ được xây bưu điện. Có thể có
nhiều giải pháp khác nhau, chương trình chỉ cần báo cáo một giải pháp.
Ví dụ
Input và Output
Page 1
3-2000
3. Median Strength
Bài toán
Một thí nghiệm không gian mới liên quan đến
N
vật thể được đánh số từ 1 đến
N
. Biết rằng là
N
là
số lẻ. Mỗi vật thể có độ bền khác nhau được biểu diễn bằng một số tự nhiên. Độ bền được ký hiệu
là
Y
với
1<=
Y
<=
N.
Độ bền trung bình của vật thể
X
được tính bằng bình quân độ bền của tất cả
các đồ vật có độ bền lớn hơn và nhỏ hơn
X
. Hãy viết chương trình xác định vật thể với độ bền
trung bình.
Thư viện
Cho trước một thư viện có tên
device
với ba thủ tục sau:
•
GetN
không đối số được gọi một lần lúc đầu; thủ tục sẽ trả lại giá trị của
N
.
•
Med3
được gọi cùng ba vật thể khác nhau như các đối số; thủ tục trả lại nhãn cho vật thể với
độ bền trung bình.
•
Answer
được gọi một lần khi kết thúc với nhãn vật thể như đối số; thủ tục báo cáo nhãn của
vật thể
X
với độ bền trung bình và kết thúc quá trình xử lý của chương trình.
Thư viện
device
tạo ra hai tệp văn bản:
MEDIAN.OUT
và
MEDIAN.LOG
. Dòng đầu tiên của
MEDIAN.OUT
chứa 1 số nguyên chỉ nhãn của vật thể qua thư viện khi gọi thủ tục
Answer
.
Dòng thứ hai chứa 1 số nguyên chỉ số lần chương trình của bạn gọi thủ tục
Med3
. Đối thoại giữa
chương trình của bạn và thư viện đượcc ghi lại trong tệp
MEDIAN.LOG
.
Hướng dẫn lập trình với Pascal
: kèm thêm câu lệnh nhập vào
uses device;
vào mã nguồn.
Hướng dẫn lập trình bằng C/C++
: dùng lệnh
#include
″
device.h
″
trong mã nguồn, tạo một dự án
MEDIAN.PRJ
và bổ xung các tệp
MEDIAN.C
(
MEDIAN.CPP
)
và
DEVICE.OBJ
vào dự án này.
Thử nghiệm
Bạn có thể thử nghiệm với thư viện bằng cách tạo ra một tệp văn bản
DEVICE.IN
. Tệp này phải
chứa hai dòng. Dòng đầu tiên chứa 1 số nguyên chỉ số vật thể
N
. Dòng thứ hai chứa các số
nguyên từ 1 đến
N
theo thứ tự số nguyeê thứ
i
là độ bền của vật thể có nhãn
i
.
Ví dụ
Page 1