Tải bản đầy đủ (.doc) (24 trang)

Tuyển tập đề thi Olympic 30/4/2009

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (272.3 KB, 24 trang )

BAN TỔ CHỨC KÌ THI

TUYỂN TẬP ĐỀ THI OLYMPIC
30 THÁNG 4 LẦN 15-2009
TIN HỌC
LỚP 10
NHÀ XUẤT BẢN ĐẠI HỌC SƯ PHẠM
TRƯỜNG THPT CHUYÊN LÊ HỒNG PHONG – TP. HỒ CHÍ MINH
Bài 1: Dự tiệc (MS0001)
Ông An đến dự một buổi tiệc. Buổi tiệc đã có N người (0<N<50000). Mỗi người dự tiệc đều
được cài lên áo một bông hoa trong đó có ghi một số nguyên dương X bất kì (X≤ 10
6
) cho biết
người khách đó sẽ dự tiệc tại phòng có chỉ số X. Hầu hết trong phòng đều có số lượng khách là
số chẵn, duy nhất chỉ có một phòng có số lượng khách là số lẻ. Để đảm bảo đủ cặp cho việc
khiêu vũ nên ban tổ chức cần tìm ra số hiệu của phòng khách có số lượng khách là số lẻ để ghi số
cho ông An.
Yêu cầu: Cho trước một danh sách khách dự tiệc cùng với các số trên áo của họ, hãy giúp
ban tổ chức tìm ra số hiệu của phòng khách có số lượng khách là số lẻ.
Dự liệu vào: cho một file văn bản DUTIEC.INP gồm:
Dòng đầu tiên ghi một số N cho biết số khách của buổi tiệc khi ông An đến
Trong N dòng tiếp theo, mỗi dòng ghi một số nguyên dương cho biết con số ghi trên áo của
người khách thứ i
Dữ liệu ra: Cho file văn bản DUTIEC.OUT gồm 1 số nguyên dương duy nhất đó là số hiệu
phòng có số khách là số lẻ
Ví dụ
DUTIEC.INP DUTIEC.OUP
5
1
2
2


3
1
3
Bài 2: Lưới (MS0002)
Cho một lưới ô vuông gồm M dòng N cột. Trong mỗi ô của lưới chỉ chứa số 0 hoặc 1, mỗi ô
vuông ở dòng x cột y kí hiệu là (x,y). Từ một ô vuông có thể di chuyển sang ô vuông chung
cạnh. Một vùng là tập hợp các ô vuông kề cạnh với nhau và có giá trị bằng nhau. Các ô kề cạnh
với vùng và có giá trị khác nhau với giá trị các ô trong vùng thì không thuộc vùng. Cho trước hia
ô vuông (x1,y1) và (x2,y2). Hãy cho biết hai ô vuông đã cho có cùng thuộc 1 vùng hay không,
trong trường hợp hai ô vuông này không cùng thuộc một vùng hãy kiểm tra xem di chuyển từ ô
(x1,y1) sang ô (x2,y2) có phải đi qua đúng một vùng trung gian hay không (Nếu đi qua đúng một
vùng trung gian thì gọi là hai ô cách một vùng)
Ví dụ: Hình bên dưới là ô vuông 4x6, hai ô (3,4) và (1,2) là thuộc một vùng, hai ô (2,3) và
(1,6) cách một vùng
1 1 0 0 1 1
0 1 1 0 0 1
0 0 1 1 0 0
1 1 0 0 0 0
Dữ liệu vào: Cho trong file văn bản LUOI.INP
Dòng đầu tiên ghi các số M, N, x1, y1, x2, y2 (1≤ x1, x2 ≤M≤100; 1≤y1, y2,≤N≤100)
Trong M dòng tiếp theo, mỗi dòng ghi N số 0 hoặc 1 tương ứng với giá trị của các ô lưới
Các số cách nhau ít nhất một khoảng trắng
Dữ liệu ra: Ghi ra file văn bản LUOI.OUT gồm 1 số nguyên:
Nếu hai ô (x1,y1) và (x2,y2) cùng thuộc một vùng thì ghi số 1
Nếu hai ô (x1,y1) và (x2,y2) cách một vùng thì ghi số 2
Các trường hợp khác ghi số 3
Ví dụ:
LUOI.INP LUOI.OUT
4 6 2 3 1 6
1 1 0 0 1 1

0 1 1 0 0 1
0 0 1 1 0 0
1 1 0 0 0 0
2
Bài 3: Lớp học (MS0003)
Trong lớp học khiêu vũ có N học viên gồm các bé trai và các bé gái. Các học viên được xếp
thành một hàng. Giáo viên muốn chọn ra một nhóm gồm những học viên đứng liên tiếp nhau và
số lượng các bé trai bằng số lượng các bé gái để hướng dẫn kĩ thuật khiêu vũ
Hỏi có bao nhiêu cách chọn thỏa mãn yêu cầu của giáo viên?
Dữ liệu vào: Cho trong file văn bản LOPHOC.INP
Dòng đầu tiên ghi số nguyên N (1≤N≤10
6
)
Dòng thứ hai ghi mô tả các học viên đứng trong hàng: Một chuỗi gồm N chữ cái A (hoặc a)
tương ứng với sô bé gái và B (hoặc b) tương ứng với số bé trai.
Dữ liệu ra: Ghi ra file văn bản LOPHOC.OUT
Ghi một số nguyên duy nhất cho biết cách thỏa mãn của đề bài.
Ví dụ:
LOPHOC.INP LOPHOC.OUT
8
Abbabab
13
TRƯỜNG THPT CHUYÊN QUỐC HỌC HUẾ
Bài 1: Nối xích (MS0004)
Người ta có N đoạn xích (N≤20000) mỗi đoạn dây xích là một chuỗi các mắt xích nối với
nhau. Các đoạn dây xích tách rời nhau. Mỗi đoạn xích không quá 20000 mắt xích.
Bằng cách cắt ra một mắt xích sau đó gắn lại, ta có thể nối hai dây xích thành một đoạn. Thời
gian để cắt và hàn một dây xích là 1 đơn vị thời gian và được xem là bằng nhau với mọi mắt xích
Nhiệm vụ của bạn là phải nối chúng lại thành một đoạn dây xích duy nhất với thời gian ít
nhất (hay số mắt xích bị cắt và hàn lại là ít nhất)

Dữ liệu vào: Cho trong file NOIXICH.INP có cấu trúc như sau:
Dòng đầu tiên là N, số đoạn xích
Dòng tiếp theo ghi N số nguyên dương, số thứ i là số mắt xích có trong đoạn thứ i (1≤i≤N)
Hai số cạnh nhau trên một dòng cách nhau ít nhất một khoảng trắng
Dữ liệu ra: Chương trình cần đưa ra file NOIXICH.OUT một số duy nhất là số đơn vị thời
gian mà bạn cần để nối N đoạn xích đó
Ví dụ:
NOIXICH.IN
P
NOIXICH.OUT NOIXICH.IN
P
NOIXICH.OUT
4
5 7 8 9
3 3
4 7 6
2
Bài 2: Biến đổi xâu (MS0005)
Với một xâu kí tự cho trước, ta có thể thực hiện các phép biến đổi sau:
• D(i) xóa 1 kí tự tại vị trí i của xâu S
• I(c,i) chèn kí tự c vào sau kí tự thứ i của xâu S
• R(i,c) thay kí tự tại vị trí i trong xâu S bởi kí tự C
Giả sử X và Y là hai xâu kí tự. Độ dài xâu X là m, độ dài xâu Y là n. hãy tìm một dãy gồm ít
nhất các phép biến đổi xâu X thành xâu Y sao cho các phép biến đổi là ít nhất. Số phép biến đổi
đó gọi là khoảng cách giữa hai xâu
Dữ liệu vào ghi trong file XAU.INP gồm 2 dòng
• Dòng thứ nhất chứa xâu X
• Dòng thứ nhất chứa xâu Y
Kết quả ghi trong file XAU.OUT gồm
• Dòng đầu tiên ghi số k là khoảng cách giữa hai xâu

• K dòng tiếp theo mỗi dòng ghi kí hiệu mỗi phép biến đổi theo trình tự thực hiện biến đổi
từ X thành Y
Ví dụ:
XAU.INP XAU.OUT
ERTRTIUI 6
TIUHJ I(J,8)
R(8,H)
D(4)
D(3)
D(2)
D(1)
Bài 3: Cắm hoa thẩm mỹ (MS0006)
Người ta muốn cắm một số loại hoa vào các lọ, có F loại hoa và V lọ hoa (F≤V), các lọ hoa
được đánh dấu từ 1 đến V theo thứ tự từ trái qua phải, mỗi loại hoa được đánh số từ 1 đến F.
Người ta bắt đầu cắm hoa theo qui tắc sau: Nếu loại hoa i được cắm vào lọ hoa V
i
, loại hoa j
được cắm vào lọ V
j
, với i<j thì V
i
<V
j
Nếu loại hoa i được cắm vào lọ hoa j thì điểm thẩm mỹ được tính A
ij

(1≤i≤F, 1≤j≤V)
Lọ hoa
1 2 3 4 5
Hoa

1 (Cẩm tú cầu) 7 23 -5 -24 16
2 (Dã Quỳ) 5 21 -4 10 23
3 (Phong Lan) -21 5 -4 -20 20

Yêu cầu: Cắm hết hoa vào lọ để điểm thẩm mỹ là cao nhất
Giới hạn: 1≤F,V≤100, -50≤A
ij
≤50
Dữ liệu vào: File CAMHOA.INP bao gồm
• Dòng đầu ghi 2 số F và V
• F dòng tiếp theo, mỗi dòng ghi V số nguyên, như vậy số A
ij
ghi ở vị trí j dòng i+1
Dữ liệu ra: Ghi vào file CAMHOA.OUT có nội dung như sau:
• Dòng đầu ghi tổng số điểm thẩm mỹ của cách xếp
• Dòng 2 ghi lần lượt F số, số thứ K là lọ hoa đã xếp của loại hoa K
TRƯỜNG THPT CHUYÊN NGUYỄN BÌNH KHIÊM
QUẢNG NAM
Bài 1: Điền số (MS0007)
Một dãy số được gọi là cấp số cộng nếu từ số hạng thứ 2 trở đi bằng số hạng liền trước cộng
với 1 số không đổi là d, d gọi là công khai của cấp số cộng.
Viết chương trình đọc từ tệp MP.INP số nguyên n (với n lẻ và 100>n>2). Tạo một cấp số
cộng n*n số hạng, với số hạng đầu b[1] được sinh ngẫu nhiên (|b[1]|≤100) và d được sinh ngẫu
nhiên (|d|≤100). Sau đó điền n*n số hạng đó vào ma trận vuông kích thước n*n sao cho tổng các
số theo hàng, tổng các số theo cột và tổng hai đường chéo chính bằng nhau, kết quả ghi vào tệp
MP.OUT
Dữ liệu vào: Trong file văn bản MP.INP gồm 1 số nguyên dương n
Dữ liệu ra: Kết quả ghi vào file văn bản MP.OUT có cấu trúc như sau:
• Dòng đầu tiên ghi hai số b[1] và b cách nhau ít nhất một kí tự trắng
• N dòng tiếp theo ghi ma trận n*n

Ví dụ:
MP.INP MP.OUT
5 24 3
72 93 24 45 66
90 36 42 63 69
33 39 60 81 87
51 57 78 84 30
54 75 96 27 48
Bài 2: Biểu thức ngoặc (MS0008)
Một cụm trong một biểu thức toán học là đoạn nằm giữa hai dấu đóng và dấu mở ngoặc đơn.
Với mỗi biểu thức cho trước hãy tách các cụm của biểu thức đó
Dữ liệu vào: Tệp văn bản NGOAC.INP chứa một dòng kiểu xâu kí tự là biểu thức cần xử lý
Dữ liệu ra: Tệp văn bản NGOAC.OUT dòng đầu tiên ghi d là số lượng cụm. Tiếp đến là d
dòng, mỗi dòng ghi một cụm được tách từ biểu thức
Trong trường hợp gặp lỗi cú pháp ghi -1
Ví dụ:
NGOAC.INP NGOAC.OUT
a*(x+1)*((b+2)/(y-3)) 4
(x+1)
(b+2)
(y-3)
((b+2)/(y-3))
TRƯỜNG THPT CHUYÊN LÊ QUÝ ĐÔN – NINH THUẬN
Bài 1: (MS0009)
Hãy liệt kê tất cả các cách điền phép toán (cộng, trừ, nhân, chia) vào giữa các số A, B, C, D,
E để có biểu thức A(phép toán) B(phép toán)A(phép toán) D(phép toán) E = F (thứ tự ưu tiên
như trong toán học)
Các số A, B, C, D, E, F được cho bởi file PT.INP viết liên tiếp nhau cách nhau 1 dấu cách.
Kết quả đưa ra file PT.OUT, mỗi dòng của một file liệt kê một biểu thức tương ứng với một cách
điền, nếu không tìm được cách điền nào thì hiện thị câu: Khong co cach dien

Ví dụ:
PT.INP PT.OUT
1 2 3 4 5 15 1+2+3+4+5=15
1*2+3*4-5=15
1 *2-3+4*5=15
1*2*3+4+5=15
Bài 2: (MS0010)
Để quản lý nhân sự ở một tỉnh nọ (≤1 triệu người), hãy sắp xếp tuổi của dân cư ở đây theo
thứ tự từ nhỏ đến lớn. Biết rằng tuổi của dân cư ở đây nằm trong đoạn 1 đến 100
Tuổi của dân cư được cho bởi file văn bản TUOI.INP viết liên tiếp nhau, cách nhau 1 dấu
cách hoặc 1 dấu xuống dòng. Kết quả đưa ra file TUOI.OUPT có cấu trúc như file đầu nhưng
được sắp xếp
Ví dụ:
TUOI.INP TUOI.OUT
1 2 20 4 45 62 3
2 4 55 2 4 5 100
1 2 2 3 4 4 4 5 5
20 45 55 62 100
Bài 3: (MS0011)
Viết chương trình ghi vào file văn bản tất cả các dãy số sắp xếp theo thứ tự từ điển được tạo
thành từ các số 1, 2, 3. Các dãy số cũng được sắp xếp theo thứ tự từ điện và không có 2 số liên
tiếp nào giống nhau. Mỗi dãy số có số lượng các chữ số nhỏ hơn hoặc bằng n.
Dữ liệu vào: Từ file văn bản XVB.INP chỉ chứa 1 số nguyên dương n duy nhất (n>0)
Dữ liệu ra: Được ghi vào file văn bản XVB.OUT mỗi dãy được ghi trên một dòng, dòng
cuối cùng ghi 1 số nguyên cho biết có bao nhiêu dãy số
Ví dụ: với n=2 , nội dung của file XVB.OUT như sau:
XVB.INT XVB.OUT
9 1
12
13

2
21
23
3
31
32
9
TRƯỜNG THPT CHUYÊN TRẦN HƯNG ĐẠO – BÌNH THUẬN
Bài 1: Các chữ số 1 (MS0012)
Cho số nguyên n không chia hết cho 2 hoặc không chia hết cho 5. Ta xét bội số của n là một
số bao gồm toàn số 1. Hỏi bội nhỏ nhất của n bao gồm các chữ số 1 có bao nhiêu chữ số
Biết rằng luôn tồn tại 1 bội số của n theo yêu cầu của bài toán
Yêu cầu: Hãy lập trình giải bài toán trên với n thỏa 2<n<10000
Dữ liệu vào: File văn bản NUMBER1.INP
• Dòng đầu tiên chứa số k chỉ số lượng các số n
• K dòng tiếp theo mỗi dòng chứa một số n
Kết quả: Ghi ra file NUMBER1.OUT
Gồm k dòng, mỗi dòng thứ i là số lượng các chữ số 1 trong bội số nhỏ nhất của số ở dòng thứ
i+1 trong file NUMBER1.INP
Ví dụ:
NUMBER1.INP NUMBER1.OUT
3
3
7
9
3
6
9
Bài 2: Mật mã Ceasar (MS0013)
Để tiến hành mã hóa văn bản, mỗi kí tự chữ cái trong văn bản sẽ được thay đổi theo cùng

một quy tắc: Mỗi kí tự được tăng lên k kí tự có tính chất xoay vòng. Ví dụ nếu k=2 thì ‘A’ →
‘C’, ‘B’ → ‘D’ … ‘Y’→ ‘A’, ‘Z’ → ‘B’. Các kí tự khác kí tự chữ cái vẫn giữ nguyên. Như vậy
với k=2 cụm từ ‘HSG 2008-2009’ được mã hóa thành ‘JUI 2008-2009’
Ban tổ chức hội thi tin học X sử dụng cách mã hóa này để mã hóa một văn bản như ng không
cho biết khóa k
Yêu cầu: Hãy lập trình giải mã các thông điệp của ban tổ chức hội thi. Biết rằng thông điệp
của ban tổ chức bao gồm nhiều dòng, mỗi dòng không chứa quá 255 kí tự và trong mỗi thông
điệp đều có chứa cụm từ khác bên cạnh nó có ít nhất một khoảng trắng
Dữ liệu: Thông điệp đã được mã hóa từ file DECRYPT.INP
• Dòng đầu chứa số n chỉ số dòng của thông điệp được mã hóa
• N dòng tiếp theo là thông điệp của ban tổ chức kì thi
Kết quả: Xuất thông điệp đã giải mã ra file DECRYCT.OUT, các kí tự được đổi thành kí tự
in hoa tương ứng bao gồm n dòng đã giải mã. Nếu không giải mã được thì xuất ra thông điệp:
“TOI KHONG THE GIAI MA THONG DIEP NAY”
Ví dụ:
DECRYPT.INP DECRYPT.OUT
2
QIPOH HEUSI divd dbd fn mbn cbj
upu uspoh iz uij ITH 2008-2009
PHONG GDTRH CHUC CAC EM
LAM BAI TOT TRONG KI THI HSG 2008-
2009
TRƯỜNG THPT CHUYÊN NGUYỄN DU – ĐĂK LĂK
Bài 1: (MS0014)
Bạn An thực hiện một mã hóa đơn giản như sau: Đổi toàn bộ chuỗi thành chữ cái in hoa, sau
đó với mỗi kí tự chữ cái trong chuỗi mã hóa thành kí tự kế tiếp nó trong bảng chữ cái La Tinh,
trong trường hợp nếu kí tự kà Z thì mã hóa nó thành A, mỗi lượt áp dụng phép mã hóa trên tất cả
các kí tự trong chuỗi sẽ cho ra một chuỗi mới, việc mã hóa được làm liên tiếp K lượt, với K khá
lớn An nghĩ từ chuỗi kết quả khó tìm lại được chuỗi ban đầu
Yêu cầu: cho biết K và chuỗi kết quả mã hóa. Hãy giúp bạn An tìm lại chuỗi ban đầu

Dữ liệu vào: Chuỗi CH.INP có dòng đầu là K (0<K<10
99
) dòng thứ 2 là chuỗi mã hóa có độ
dài chuỗi <125 kí tự
Kết quả ra: File CH.OUT gồm một dòng ghi chuỗi ban đầu
Bài 2: (MS0015)
Cho 2 dãy số: A có n phần tử, B có m phần tử, các phần tử là các số nguyên x
Tính số lượng giá trị trong A mà có mặt trong B
Yêu cầu: viết ra số lượng tìm được
Dữ liệu vào: File AB.INP có dòng đầu là hai số n và m
Từ dòng thứ 2 lần lượt là n số của dãy A và m số của dãy B
0<m,n<10
6
, |x|<10
9
Kết quả ra: File AB.OUT gồm 1 dòng ghi số lượng tìm được
Bài 3: (MS0016)
Cho n địa điểm đánh số từ 1 đến n, người ta chọn một địa điểm X để lập trường học. Để tạo
điều kiện cho học sinh đi học, người ta tiến hành rải nhựa một số tuyến đường sao cho đảm bảo
học sinh đều đi đến trường trên đường nhựa và tổng số độ dài các quảng đường phải rải nhựa là
ít nhất
Yêu cầu phải tìm ra m là tổng độ dài các quảng đường phải rải nhựa
Dữ liệu vào: File DD.INP có dòng đầu là n, X (0<n≤500, 0<X≤N). n dòng kế tiếp mỗi dòng
ghi 3 số a, b, c cho biết khoảng cách từ điểm a đến điểm b là c (0<c<32000). Dữ liệu luôn đảm
bảo có đường đi từ điểm khác về điểm X đã chọn
Kết quả ra: file DD.OUT gồm 1 số m
CH.INP CH.OUT AB.IN
P
AB.OU
T

DD.INP DD.OUT
100000000000000000
XMRL XLER ZYSX
OLS
TINH THAN VUOT
KHO
3 4
2 5 6 7
5 5 6
2 4 2
2 1 15
2 3 8
2 4 20
3 4 6
29
TRƯỜNG THPT CHUYÊN THĂN G LONG – LÂM ĐỒNG
Bài 1: Dãy số (MS0017)
Cho dãy số A
1
, A
2
, …, A
n
(1≤N≤100000) mỗi số không vượt quá 10000. Dãy này được viết trên
mỗi vòng tròn nghĩa là khi cắt vòng tròn taiị vị trí j ta thu được:
A
j
,A
j+1
, A

j+2
,…, A
n-1
, A
n
, A
1
, A
2
,…, A
j-1
Vị trí j được gọi là vị trí tốt nếu các điều kiện sau đây được thỏa mãn
• A
j
>0
• A
j
+A
j+1
>0
• …
• A
j
+A
j+1
+…+A
n
>0
• A
j

+A
j+1
+…+A
n
+A
1
>0
• …
• A
j
+A
j+1
+…+A
n
+A
1
+A
2
+…+A
j-2
>0
• A
j
+A
j+1
+…+A
n
+A
1
+A

2
+…+A
j-2
+A
j-1
>0
Yêu cầu: Hãy đếm số vị trí tốt
Dữ liệu vào: Từ file BAI1.INP bao gồm
Dòng đầu tiên chứa số nguyên N
Dòng thứ 2 chứa dãy số A
1
,A
2
,…,An
Kết quả ra: ghi trong file BAI1.OUT bao gồm
Một số nguyên duy nhất là vị trí tốt
Ví dụ:
BAI1.INP BAI2.INP
5
0 1 -2 10 3
2
TRƯỜNG THPT LÊ QUÝ ĐÔN – LONG AN
Bài 1: (MS0018)
Trong mặt phẳng Oxy, cho tam giác vuông có hai cạnh góc vuông song song với trục Ox và Oy,
tọa độ 3 đỉnh đều có giá trị nguyên, từ trung điểm các cạnh ta xây dựng được một tam giác mới,
tam giác này được gọi là đồng dạng với tam giác đã cho nếu tọa độ các đỉnh của nó nguyên. Từ
tam giác mới ta lại tiếp tục xây dựng tam giác đồng dạng với tam giác đầu tiên
Yêu cầu: Từ một tam giác như trên hãy đếm tất cả các tam giác đồng dạng với tam giác đã cho
Dữ liệu vào: File văn bản TAMGIAC.INP có cấu trúc như sau:
Gồm 3 dòng, mỗi dòng là tọa độ của một đỉnh

Dữ liệu ra: Lưu vào file văn bản TAMGIAC.OUT là số tam giác tìm được
Bài 2: (MS0019)
Cho một bảng hình chữ nhật có chiều dài m, chiều rộng n, có m x n ô vuông (m,n nguyên), giá trị
của mỗi ô vuông là 0 hoặc 1. Nếu các số 0 ở bên trong các ô có chung ít nhất một cạnh ta gọi các
ô này có chung thành phần liên thông, tương tự cho các ô số 1. Nếu các thành phần liên thông
này có ít nhất một ô ở biên ta nói đó là thành phần liên thông giáp biên.
Bài toán: Cho bảng hình chữ nhật như trên hãy tìm thành phần liên thông giáp biên lớn nhất
Dữ liệu vào: từ file văn bản CHUNHAT.INP có cấu trúc như sau:
Dòng đầu tiên là hai số m và n
M dòng và n cột tiếp theo ghi giá trị mỗi ô
Dữ liệu ra: Trong file văn bản CHUNHAT.OUT
Dòng đầu ghi tổng số ô, nếu không có thì ghi 0
Dòng tiếp theo ghi tọa độ các ô trong thành phần liên thông giáp biên lớn nhất
Ví dụ
TAMGIAC.INP TAMGIAC.OUT CHUNHAT.INP CHUNHAT.OUT
1 1
3 1
1 5
1 5 6
1 1 1 1 1 1
1 1 0 0 0 0
0 0 1 0 0 0
1 1 0 1 1 1
0 0 0 1 0 0
7
(2,3) (2,4) (2,5) (2,6)
(3,4) (3,5) (3,6)
TRƯỜNG THPT CHUYÊN NGUYỄN ĐÌNH CHIỂU – ĐỒNG THÁP
Bài 1: (MS0020)
Cho lưới ô vuông gồm m dòng n cột chứa các số 0 và 1, mỗi ô vuông ở dòng x cột y kí hiệu là

(x,y). Từ một ô vuông có thể di chuyển sang ô vuông chung cạnh. Một vùng là tập hợp các ô
vuông kề cạnh với nhau và có giá trị bằng nhau.
Cho trước 2 ô vuông (x1,y1) và (x2,y2) hãy cho biết 2 ô vuông đã cho có cùng thuộc một vùng
hay không. Trong trường hợp hai ô vuồng này không cùng thuộc một vùng hãy kiểm tra xem nếu
di chuyển từ (x1,y1) đến ô (x2,y2) có phải đi qua đúng một vùng trung gian hay không (gọi là
hai ô cách một vùng)?
Ví dụ: hình bên dưới là một ô vuông 4x6, hai ô (1,2) và (3,4) là thuộc cùng một vùng, còn 2 ô
(2,3) và (1,6) là cách một vùng
1 1 0 0 1 1
0 1 1 0 0 1
0 0 1 1 0 0
1 1 0 0 0 0
Dữ liệu vào: cho từ file văn bản LUOI.INP bao gồm
Dòng đầu ghi các số m, n, x1, x2, y1, y2 (1,x1,x2,y1,y2≤m,n≤250)
Dòng i trong mỗi dòng tiếp theo mỗi dòng ghi n số 0 hoặc 1 tương ứng với giá trị các dòng i của
lưới.
Dữ liệu ra: Ghi vào file văn bản LUOI.OUT gồm một số nguyên:
Nếu 2 ô (x1,y1) và (x2,y2) thuộc cùng một vùng thì ghi số 1
Nếu 2 ô (x1,y1) và (x2,y2) cách một vùng thì ghi số 2
Các trường hợp khác ghi số 0
Ví dụ:
LUOI.INP LUOI.OUT
4 6 2 3 1 6
1 1 0 0 1 1
0 1 1 0 0 1
0 0 1 1 0 0
1 1 0 0 0 0
2
TRƯỜNG THPT THỊ XÃ CAO LÃNH – ĐỒNG THÁP
Bài 1: Chuỗi con tăng dài nhất (MS0021)

Một chuỗi được gọi là tăng nếu không có ít hơn một kí tự, các kí tự trong chuỗi là khác nhau và
được sắp xếp theo thứ tự tăng của mã ASCII.
Viết chương trình tìm chuỗi con tăng dài nhất từ một chuỗi S cho trước có độ dài n (1≤n≤20000).
Chuỗi con của S là chuỗi gồm một số kí tự trong S có độ dài ≤S và thứ tự các kí tự không thay
đổi.
Dữ liệu vào: Được cho trong tập tin văn bản CHUOI.INP gồm 2 dòng:
• Dòng đầu ghi giá trị n
• Dòng 2 gồm n kí tự liên tiếp gồm các kí tự từ ‘0’ đến ‘z’
Dữ liệu ra: Ghi vào file văn bản CHUOI.OUT gồm 2 dòng
• Dòng đầu ghi độ dài dài nhất của chuỗi con tăng
• Dòng sau ghi chuỗi con tăng dài nhất của S
Ví dụ:
CHUOI.INP CHUOI.OUT
18
abdfde13jlahgalkj
l
7
abdfjkl
TRƯỜNG THPT CHUYÊN LÊ QUÝ ĐÔN – BÀ RỊA VŨNG TÀU
Bài 1: Dãy hình chữ V (MS0022)
Một dãy số b
1
,b
2
,…,b
i-1
,b
i
,b
i+1

,…,b
n
được gọi là dãy hình chữ V khi dãy đó thỏa mãn: b
1
>b
2
>…
>b
i-1
>b
i
<b
i+1
<…<b
n
(Với i=1,2,3…,n)
Yêu cầu: cho một dãy số nguyên a
1
,a
2
,…,a
n
hãy cho biết dãy con dài nhất hình chữ V của nó bao
nhiêu phân tử
Dữ liệu vào: Từ file ROWV.INP
Dòng đầu tiên ghi số nguyên dương n
Dòng i là giá trị của a
i
(|a
i

|≤10
9
/i=1,2, ,n)
Dữ liệu ra: Ghi vào file ROWN.OUT số lượng phần tử của dãy con hình chữ V dài nhất tìm
được
Bài 2: Hugo (MS0023)
Gia đình Hugo bị nhốt vào một căn phòng bí mật của mụ phù thủy Scyla. Một đêm nọ, nhân cơ
hội mụ phù thủy ngủ say, gia đình Hugo đã tìm cách thoát khỏi căn phòng đó nhưng trước mặt
anh là một mê cung. Hugo đã lấy được bản đồ mê cung, mê cung này có thể mô tả thành n địa
điểm (được đánh số từ 1 đến n), giữa hai điểm của mê cung có thể có đường đi bộ trực tiếp hoặc
phải vượt sông hoặc không thể đi qua được. Việc vượt sông là rất nguy hiểm vì bản đồ có ghi
chú dưới sông có thể có cá sấu. Giả thiêt rằng Hugo ban đầu ở điểm 1 và điểm cần đến là n. Hãy
cho biết tổng độ dài đường bộ mà Hugo phải đi ngắn nhất là bao nhiêu sao cho số lần vượt sông
là ngắn nhất
Dữ liệu vào: từ file HUGO.INP
Dòng đầu tiên ghi số nguyên dương N (N≤100)
Tiếp đến là một số dòng, mỗi dòng ghi 3 số x, y, z (0≤z≤100)
Nếu z=0 thì giữa điểm x và y có sông
Nếu z<>0 thì cho biết độ dài đường bộ qua lại trực tiếp giữa x và y là z
Kết quả: Ghi vào file HUGO.OUT gồm tổng độ dài đường bộ mà Hugo phải đi và số lần Hugo
phải vượt sông thỏa mãn yêu cầu (mỗi số ghi trên 1 dòng). Nếu không có đường đi ghi -1
ROWN.INP ROWN.OUT HUGO.INP HUGO.OUT
8
6
2
5
9
4
7
4

8
5 6
1 2 1
2 3 0
2 4 0
3 4 0
1 3 5
4 6 2
3 6 0
1 5 0
5 6 4
3
1
TRƯỜNG THPT CHUYÊN LÝ TỰ TRỌNG – CẦN THƠ
Bài 1: Dán tem ít nhất. (MS0024)
Một bưu điện có N lọai tem đánh số từ 1 đến N với giá trị tương ứng G[1], G[2],…,G[n]. Một
người cần dán đúng S tiến tem.
Yêu cầu: hãy chọn cho người đó một cách mua ít tem nhất
Dữ liệu vào: Được cho bởi file văn bản POST.INP trong đó dòng thứ nhất chứa 2 số nguyên
dương N,S (N≤20,S≤1000). Trong N dòng tiếp theo, dòng thứ i ghi số G[i] (G[i]≤1000). Biết
rằng ta luôn có thể chọn được các con tem có giá trị bằng S
Dữ liệu ra: Ghi vào file văn bản POST.OUT gồm N dòng, dòng thứ i ghi số con tem i cần mua
Ví dụ:
POST.INP POST.OUT
3 34
4
12
10
0
2

1
Bài 2: Đẳng cấu (MS0025)
Hai số nguyên không chứa các số 0 không có nghĩa được gọi là đẳng cấu nếu chúng có cùng số
lượng các chữ số và vị trí các chữ số lặp lại như nhau. Ví dụ các số sau là đẳng cấu với nhau:
12156, 73748, 51590, 48412. Các số sau từng cặp 1 không đẳng cấu với nhau: 222, 545, 66, 811.
Tập tất cả các số nguyên đẳng cấu với nhau và với số nguyên cho trước gọi là tập đẳng cấu. số
lượng các số trong tập đẳng cấu gọi là lực lưỡng của tập. Ví dụ số 11 có tập đẳng cấu chứa nó là
{11, 22, 33, 44, 55, 66, 77, 88, 99}, tập này có lực lưỡng là 9, mỗi số nguyên thuộc 1 và chỉ 1 tập
đẳng cấu. Các số đẳng cấu có thể dùng để phân loại sản phẩm, các sản phẩm cùng nhóm sẽ được
gán mã là các số đẳng cấu với nhau
Yêu cầu:
Cho hai mã sản phẩm hãy kiểm tra hai sản phẩm này cùng nhóm với nhau hay không
Với một mã cho trước hãy tính số lượng sản phẩm khác nhau cùng nhóm với sản phẩm này, tức
là xác định lực lượng đẳng cấu
Dữ liệu vào: Từ file văn bản ISOSET.INP gồm nhiều dòng, mỗi dòng có một trong hai dạng: V
M N hoặc S M, trong đó M và N là các số nguyên không quá 20 chữ số, kí tự V xác định yêu cầu
kiểm tra M và N có đẳng cấu với nhau hay không (câu hỏi loại V), kí tứ xác định yêu cầu tính
lực lưỡng tập đẳng cấu chứa M (câu hỏi loại S)
Dữ liệu ra: Ghi vào file văn bản ISOSET.OUT gồm nhiều dòng, mỗi dòng chứa một kết quả cho
dòng tương ứng trong file input, với dòng input loại V câu trả lời tương ứng là YES hoặc NO,
với loại S kết quả là một số nguyên
Ví dụ:
ISOSET.INP ISOSET.OUT
V 12156 73748
V 1111 1112
S 11
YES
NO
9
Bài 3: Chọn xâu (MS0026)

Cho một số nguyên k (0<k≤255) và N xâu kí tự có độ dài L (N nguyên, 0<L≤255,0<L<255) là
S
1
, S
2
, ,S
n-1
,S
n
đôi một khác nhau chỉ gồm các chữ cái thường
Yêu cầu: Hãy tìm một xâu H nhỏ nhất thỏa mãn tính chất sau đây: Tồn tại k vị trí khác nhau trên
xâu H là vị trí xuất hiện của một trong các xâu S
1
, S
2
, ,S
n-1
,S
n
(p là vị trí xuất hiện của xâu S
trong H nếu hàm Copy(H,p,L)=S)
Dữ liệu vào: Từ file XAU.INP
Dòng đầu ghi N, L, K
N dòng tiếp theo, dòng i ghi xâu S
i
Dữ liệu ra: ghi file XAU.OUT
Dòng đầu ghi độ dài nhỏ nhất
Dòng thứ 2 ghi xâu H thỏa mãn bài toán
K dòng tiếp theo mỗi dòng thể hiện một vị trí xuất hiện gồm 2 số u, p cho biết xâu S
u

xuất hiện ở
vị trí p trên H
Ví dụ:
XAU.INP XAU.OUT
2 10 2
aaaaaaaxyz
xyzabcdefg
17
aaaaaaaxyzabcdefg
1 1
2 8
TRƯỜNG THPT CHUYÊN THOẠI NGỌC HẦU – AN GIANG
Bài 1: (MS0027)
Trong một trò chơi truyền tin, mỗi đội chơi gồm n thành viên được bố trí dọc theo một đoan
đường. Một đầu của đoạn đường được quy định là điểm phát tin. Từ điểm này các thành viên của
đội chơi sẽ được đánh số lần lượt từ 1, 2,…,n dọc theo đoạn đường.
Khi có hiệu lệnh, một thông tin sẽ được chuyển tới cho người số 1. Nhiệm vụ của người chơi là
phải truyền thông tin này cho tất cả các thành viên trong đội. Đội nào hoàn thành việc truyền tin
nhanh nhất sẽ thắng cuộc. Quá trình truyền tin phải tuân thủ các quy tắc sau đây
1. Mỗi thành viên chỉ có thể di chuyển tới, lui dọc đoạn đường với tốc độ một đơn vị thời
gian trên 1 giây
2. Mỗi thành viên có thể truyền tin cho thành viên tiếp theo nếu họ cách nhau không quá
một khoảng cách K cho trước
3. Sau khi nhận tin, mỗi thành viên có thể truyền tin ngay cho thành viên khác, khoảng thời
gian từ lúc nhận tin cho đến lúc truyền tin xem như bằng 0
Viết chương trình xác định thời gian hoàn thành việc truyền tin ngắn nhất mà mỗi đội có thể thực
hiện được
Dữ liệu vào: Được lưu trong tập GAME.INP có cấu trúc như sau:
- Dòng đầu tiên chứa số thự K (0 ≤ K ≤ 10
6

), khoảng cách tối đa mà hai thành viên có thể
thực hiện việc truyền tin
- Dòng thứ 2 chứa số nguyên N (1≤N≤10
5
), cho biết thành viên trong mỗi đội chơi
- Mỗi dòng trong N dòng tiếp theo chứa một số thực D
i
(1≤D
i
≤10
9
; i=1,2,3,…,N) cho biết
khoảng cách của thành viên thứ i so với điểm phát tin
Dữ liệu ra: Lưu vào tệp văn bản GAME.OUT chứa số thực cho biết thời gian ngắn nhất để
hoàn thành việc truyền tin
Ví dụ:
GAME.INP `GAME.OUT
2.000
4
0.000
4.000
4.000
8.000
1.000
SỞ GIÁO DỤC ĐÀO TẠO BẠC LIÊU
Bài 1: Nối xích (MS0028)
Người ta có N đoạn xích (N≤20000) mỗi đoạn dây xích là một chuỗi các mắt xích nối với
nhau. Các đoạn dây xích tách rời nhau. Mỗi đoạn xích không quá 20000 mắt xích.
Bằng cách cắt ra một mắt xích sau đó gắn lại, ta có thể nối hai dây xích thành một đoạn. Thời
gian để cắt và hàn một dây xích là 1 đơn vị thời gian và được xem là bằng nhau với mọi mắt xích

Nhiệm vụ của bạn là phải nối chúng lại thành một đoạn dây xích duy nhất với thời gian ít
nhất (hay số mắt xích bị cắt và hàn lại là ít nhất)
Dữ liệu vào: Cho trong file NOIXICH.INP có cấu trúc như sau:
Dòng đầu tiên là N, số đoạn xích
Dòng tiếp theo ghi N số nguyên dương, số thứ i là số mắt xích có trong đoạn thứ i (1≤i≤N)
Hai số cạnh nhau trên một dòng cách nhau ít nhất một khoảng trắng
Dữ liệu ra: Chương trình cần đưa ra file NOIXICH.OUT một số duy nhất là số đơn vị thời
gian mà bạn cần để nối N đoạn xích đó
Bài 2: Tam giác số (MS0029)
Hình sau mô tả một bản tam giác với các số nguyên không âm
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Hãy viết chương trình để tính tổng lớn nhất các số trên đường đi từ đỉnh tam giác và kết thúc
tại một điểm nào đó ở đáy tam giác. Biết:
+ Mỗi bước đi ta được quyền đi xuống bên trái hoặc bên phải của số đó
+ Số hàng trong tam giác lớn hơn 1và ≤100
+ Các số trong tam giác đều là số nguyên không âm và ≤100
Dữ liệu vào: Từ file TAMGIAC.INP gồm
+ Dòng đầu ghi giá trị N (số lượng các dòng trong tam giác)
+ Dòng i+1 (1≤i≤N) ghi i số
Các số cách nhau ít nhất một khoảng trắng
Dữ liệu ra: Ghi vào file TAMGAC.OUT gồm một số duy nhất là tổng lớn nhất tìm được
Ví dụ:
NOIXICH.IN
P
NOIXICH.OUT TAMGIAC.INP TAMGIAC.OUT
4

5 7 8 9
3 5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
30
TRƯỜNG THPT CHUYÊN NGUYỄN BỈNH KHIÊM
VĨNH LONG
Bài 1: Tìm biểu thức (MS0030)
Cho xâu số N= ‘123456789’ và số nguyên M
Yêu cầu: Hãy tìm cách chèn vào N các dấu cộng hoặc trừ để thu được biểu thức có giá trị
bằng M (nếu có thể)
Dữ liệu vào: Đọc từ file văn bản BTHUC.INP có nội dung duy nhất là số nguyên M
Dữ liệu ra: Ghi vào file văn bản BTHUC.OUT. Ghi tất cả các biểu thức thu được nếu có,
nếu không thu được biểu thức nào có giá trị bằng M thì ghi là “KHONG CO”
Ví dụ:
BTHUC.INP BTHUC.OUT
500 1-234-56+789
1-2+345+67+89
-12+34+567-89
1000 KHONG CO
*Bài 2: Làm đường đi (MS0031)
Trong một tỉnh nọ có N xã được sắp xếp từ 1 đến N. Người ta muốn làm một con đường đi từ
xã 1 đến xã N, giả sử đường đi từ xã 1 đến xã N có thể xây dựng qua một số xã trung gian
được đánh số từ 2 đến N-1. Người ta lập được bảng chi phí làm đường nối bất kì 2 xã (Nếu
giữa hai xã này có thể xây dựng được đường) trong đó chi phí làm đường đi từ xã i đến xã j
(nếu có thể) là A
ij

. Ví dụ dưới đây là bảng chi phí làm các đoạn đường nối giữa hai xã bất kì
trong một tỉnh có N=5 xã
2 3 4 5
1 10 20 10
0
_
2 0 30 _ _
3 30 0 25 60
4 _ 25 0 5
Trong bảng trên chi phí làm đường nối từ xã 1 đến xã 2 là 10, từ xã 1 đến xã 3 là 20, từ xã 1
đến xã 4 là 100…. Dấu “-” trong bảng có nghĩa là giữa hai xã i và j không thể xây dựng con
đường nào
Yêu cầu: hãy lập trình tìm chi phí nhỏ nhất và hành trình của con đường đi từ xã 1 đến xã N.
Lưu ý hành trình khồn bắt buộc phải đi qua tất cả các xã.
Dữ liệu vào: Đọc từ file văn bản DUONGDI.INP có nội dung:
+ Dòng đầu tiên ghi số N
+ Trong N-1 dòng tiếp theo mỗi dòng ghi N-1 phần tử là các số A
ij
hoặc dấu “-” thể hiện chi
phí làm đoạn đường nối giữa hai xã i và j hoặc không thể xây dựng đường nối từ hai xã này
(1≤i≤N-1;2≤j≤N) các số và dấu “-” cách nhau ít nhất là một kí tự trắng
(2≤N≤100; 0≤A
ij
≤32767)
Dữ liệu ra: Ghi vào file văn bản DUONGDI.OUT gồm
+ Dòng thứ nhất ghi số K là chi phí nhỏ nhất để xây dựng con đường từ xã 1 đến xã N
+ Dòng thứ hai ghi hành trình của đường đi từ xã 1 đến xã N có chi phí nhỏ nhất
Ví dụ:
DUONGDI.INP DUONGDI.OUT
5

10 20 100 _
0 30 _ _
30 0 25 60
_ 25 0 5
50
1 3 4 5
*Bài 3: Nối mạng (MS0032)
Cho N máy tính được đánh số từ 1 đến N. Chi phí nối mạng giữa máy i và máy j là C
ij
. Ban
đầu đã có sẵn K cặp máy đã nối mạng
Yêu cầu: Tìm cách nối thêm dây cáp sao cho các máy tính trong mạng là liên thông và chi
phí là nhỏ nhất (chú ý có thể sử dụng lại hệ thống mạng cũ)
Dữ liệu vào: Đọc từ file văn bản NOIMANG.INP có nội dung
+ Dòng đầu gồm 2 số N và K
+ K dòng tiếp theo mỗi dòng là 3 số i, j, C
ij
là thông tin về cặp máy đã nối trước đó
+ Các dòng còn lại mỗi dòng là 3 số i, j, C
ij
là thông tin về cặp máy có thể nói với nhau trong
mạng
Trên cùng một dòng các số cách nhau một dấu cách
Giới hạn: 2≤N≤100
Dữ liệu ra: Ghi vào file văn bản NOIMANG.OUT gồm
+ Dòng 1 là chi phí nhỏ nhất (không kể phần sử dụng lại mạng cũ)
+ Từ dòng 2 trở đi mỗi dòng là một cặp cạnh được nối
NOIMANG.INP NOIMANG.OUT NOIMANG.INP NOIMANG.OUT
6 2
1 3 17

2 3 18
1 2 33
2 4 20
3 4 16
3 5 4
4 5 9
4 6 8
5 6 14
21
2 3
3 1
4 5
5 3
6 4
8 0
1 2 5
1 3 7
1 4 10
3 5 6
3 6 4
4 6 8
5 7 2
6 7 7
6 8 5
37
2 1
3 1
4 6
5 3
7 5

8 6
TRƯỜNG THPT CHUYÊN HUỲNH MẪN ĐẠT – KIÊN GIANG
Bài 1: BANG.PAS (MS0033)
Có N bài hát được đánh số từ 1 đến N, người ta muốn ghi N bài hát đó vào một băng nhạc có
thời lượng chứa toàn bộ chúng. Muốn nghe bài hát nào thì chỉ việc nhấn phím tương ứng với
bài đó. Để tìm và phát bài thứ i trên băng, máy xuất phát từ đầu cuốn băng, quay băng để bỏ
qua i-1 bài trước đó, thời gian quay băng bỏ qua mỗi bài và thời gian phát bài đó được tính
như nhau. Tính trung bình, các bài hát trong một ngày được lựa chon với số lần như nhau
Yêu cầu: Biết thời lượng phát của N bài hát, hãy tìm cách ghi các bài trên băng sao cho tổng
thời gian quay băng trong mỗi ngày là ít nhất
Dữ liệu vào: File BANG.INP
+ Dòng đầu ghi số N (1≤N≤10000)
+ Dòng thứ 2 ghi theo thứ tự là thời lượng phát của N bài từ 1 đến N (thời lượng phát mỗi bài
không quá 20000)
Dữ liệu ra: File BANG.OUT
N dòng đầu tiên, mỗi dòng gồm 2 số nguyên dương j và d cách nhau bởi dấu cách, trong đó j
là mã số của bài hát cần ghi, d là thời gian tìm và phát bài đó theo trật tự ghi
Dòng thứ N+1 là tổng số thời gian quay băng nếu mỗi bài hát được phát 1 lần trong ngày
Ví dụ:
BANG.INP BANG.OUT
3
7 2 3
2 2
3 5
1 12
19
TRƯỜNG THPT CHUYÊN LÊ HỒNG PHONG – TPHCM
Bài 1: Lớp học khiêu vũ (MS0034)
Trong lớp học khiêu vũ có N học viên gồm các bé trai và các bé gái. Các học viên được xếp
thành một hàng. Giáo viên muốn chọn ra một nhóm gồm những học viên đứng liên tiếp nhau và

số lượng các bé trai bằng số lượng các bé gái để hướng dẫn kĩ thuật khiêu vũ
Hỏi có bao nhiêu cách chọn thỏa mãn yêu cầu của giáo viên?
Dữ liệu vào: Cho trong file văn bản LOPHOC.INP
Dòng đầu tiên ghi số nguyên N (1≤N≤10
6
)
Dòng thứ hai ghi mô tả các học viên đứng trong hàng: Một chuỗi gồm N chữ cái A (hoặc a)
tương ứng với sô bé gái và B (hoặc b) tương ứng với số bé trai.
Dữ liệu ra: Ghi ra file văn bản LOPHOC.OUT
Ghi một số nguyên duy nhất cho biết cách thỏa mãn của đề bài.
Ví dụ:
LOPHOC.INP LOPHOC.OUT
8
Abbabab
13
Bài 2: REPAIR (MS0035)
Một công xưởng có cấu trúc hình chữ nhật được chia thành M ô vuông hàng dọc và N ô
vuông hàng ngang (MxN). Các ô vuông có thể có các bức tường dọc theo đường biên của nó
theo hướng đông (D), tây (T), nam (N), bắc (B). phòng được giới hạn bởi các bức tường của
ô vuông gộp lại.
Một nhà thầu được mời đến sửa chữa công xưởng với yêu cầu: Chỉ được phá bỏ một bức
tường của ô vuông nào đó để tạo thành một phòng mới có diện tích lớn nhất trong số các
phòng của công xưởng sau khi sửa chữa.
Dữ liệu vào: Tập tin văn bản REPAIR.INP
+ Dòng đầu tiên hai số nguyên dương M và N (0≤M,N≤50)
+ Mỗi dòng tiếp theo, mỗi dòng có N số p (0≤p≤15). Số p biểu thị cho số ô vuông tương ứng
có bao nhiêu bức tường xung quanh. Số p là tổng của:
1 (nếu có tường ở phía T)
2 (Nếu có tường ở phía B
4 (nếu có tường ở phía D)

8 (nếu có tường ở phía N)
Dữ liệu ra: Tập tin văn bản REPAIR.OUT
+ Dòng đầu tiên: Số lượng phòng của công xưởng trước khi sửa chữa
+ Dòng thứ 2: Diện tích của phòng lớn nhất trước khi sửa chữa
+ Nếu phá bỏ một bức tường thì dòng thứ 3 ghi diện tích của phòng lớn nhất sau khi sửa
chữa, nếu giữ nguyên thì dòng thứ 3 ghi số 0
Ví dụ:
REPAIR.INP REPAIR.INP REPAIR.INP REPAIR.INP
4 7
11 6 11 6 3 10 6
7 9 6 13 5 15 5
1 10 12 7 13 7 5
13 11 10 8 10 12 13
5
9
16
4 7
3 2 2 2 2 2 6
1 0 0 4 1 0 4
1 0 0 4 1 0 4
9 8 8 12 9 8 12
1
28
0
Hướng dẫn:
Ta thấy rằng các giá trị từ 0 đến 15 tương ứng các xâu nhị phân 4 Bit (0000 đến 1111) với
quy định
+ Nếu bằng 1 là có tường, bằng 0 là không có tường
+ Bit thứ 1 là tường phía Nam
+ Bit thứ 2 là tường phía Đông

+ Bit thứ 3 là tường phía Bắc
+ Bit thứ 4 là tường phía Tây
(Chỉ số của Bit tính từ trái qua phải)
Ví dụ 1 ô có giá trị 11
10
=1011
2
có nghĩa là ô đó có 3 bức tường ở phía N, B và T
Ô có giá trị 14
2
=1110
2
có nghĩa là ô đó có 3 bức tường ở phía T, B và D
Như vậy thay vì lưu các con số ở mỗi ô ta sẽ lưu các dãy xâu nhị phân 4 bit
Thuật Toán: Đệ quy
Mảng Z dùng để lưu giá trị của ô x,y
PROCEDURE TRY(x,y); {Ô x,y đang được thăm}
BEGIN
Chon[x,y]:=true; {đánh dâu ô x,y đã được chọn để không thăm lại}
INC(dem);
If Z[x,y][1]=0 then Try(x,y+1);
If Z[[x,y][2]=0 then Try(x+1,y);
If Z[[x,y][3]=0 then Try(x,y-1);
If Z[[x,y][4]=0 then Try(x-1,y);
END;
Để chuyển giá trị của ô (x,y) từ số sang xâu nhị phân ta chỉ cần đổi sang nhị phân bình
thường
For i:=1 to N do
For j:=1 to N do Z[i,j]:=Doi_so_sang_xau_nhi_phan(A[i,j]);
TRƯỜNG THPT CHUYÊN NGUYỄN THƯỢNG HIỀN – TPHCM

Bài 1: Xếp gỗ màu (MS0036)
Có N (N≤100) thanh gỗ hình hộp chữ nhật có kích thước như nhau được đánh số từ 1 đến N.
Mỗi thanh đã được sơn màu ở hai đầu (có thể màu ở hai đầu của một thanh không giống
nhau), để sơn các thanh gỗ này người ta có thể lấy từ K (K≤50) màu được đánh số từ 1,2,
…,K. Hai thanh gỗ bất kỳ được xếp nối đầu với nhau nếu hai đầu nối cùng chung một màu
Dữ liệu vào: File văn bản TGO.INP
+ Dòng đầu là hai số N và K
+ N dòng tiếp theo dong thứ j ghi hai số u và v chỉ hai màu của thanh gỗ thứ j
Dữ liệu ra: ghi vào file TGO.OUT
+ Dòng đầu ghi ‘Co’ nếu ó thể sắp tất cả các thanh gỗ thành một chuỗi theo các quy tắc trên
ngược lại ghi ‘Khong’
+ Dòng thứ 2 ghi số lượng nhiều nhất chuỗi các thanh gỗ có thể xếp được.
+ Dòng thứ 3 ghi chỉ số của các thanh gỗ được sắp xếp trong chuỗi dài nhất
Ví dụ:
TGO.INP TGO.OUT
7 10
3 2
4 2
1 4
Khong
5
1 2 3 5 6
7 8
1 3
2 5
6 7
Bài 2: Điền dấu (MS0037)
Cho một số tự nhiên N, hãy đặt các dấu cộng hoặc trừ vào giữa các chữ số của dãy số tự
nhiên liên tiếp từ 1,…,m (0<m≤9) viết theo thứ tự đã cho để tạo ra một biểu thức có giá trị
bằng n.

Ví dụ: Cho N=122, m=9 thì kết quả có thể nhận được là:
12+34-5-6+78+9
Dữ liệu vào: file SO.INP
+ Dòng đầu tiên ghi số tự nhiên N
+ Dòng thứ 2 ghi số tự nhiên M
Dữ liệu ra: File SO.OUT
+ Mỗi kết quả ghi trên một dòng
+ Nếu không tìm thấy thì ghi ‘KHONG TIM THAY’
Ví dụ:
SO.INP SO.OUT
15
5
1+2+3+4+5
1+23-4-5
Bài 3: Thi đấu (MS0038)
Bảng kết quả thi đấu vòng tròn của một giải vô địch bóng đá gồm N đội bóng được cho bởi
ma trận vuông cấp N, trong đó tất cả các phần tử thuộc đường chéo chính bằng 0, còn các
phần tử khác có thể bằng 3, 1 hoặc 0. Đó là số điểm của các trận đấu: 3 – thắng, 1 – hòa, 0 –
thua.
1. Hãy tìm chỉ số của các đội không thua trận nào
2. Đếm số trận thắng, thua, hòa và tổng số điểm của từng đội và in ra danh sách theo thứ tự
giảm dần của tổng số điểm
Dữ liệu vào: File văn bản THIDAU.INP gồm N+1 dòng
+ Dòng đầu là N
+ N dòng tiếp theo, dòng thứ i chứa N số là số điểm các trận đấu của đội thứ i. Mỗi số cách
nhau ít nhất một ký tự trắng
Dữ liệu ra: File văn bản THIDAU.OUT
+ Dòng đầu tiên là kết quả câu 1
+ Các dòng còn lại là danh sách các đội được sắp xếp theo thứ tự tổng điểm giảm dần, có 4
cột: Số thứ tự của đội, số trận thắng, số trận hòa, số trận thua và tổng số điểm

Ví dụ:
THIDAU.INP THIDAU.OUT
5 4 5
0 1 0 0 1
1 0 0 0 0
3 3 0 0 1
3 3 3 0 1
1 3 1 1 0
Stt Thang Hoa Thua Diem
4 3 1 0 10
3 2 1 1 7
5 1 3 0 6
1 0 2 2 2
2 0 1 3 1
TRƯỜNG THPT CHUYÊN TỈNH TIỀN GIANG
Bài 2: Chọn điểm xây dựng (MS0039)
Một vùng núi có N điểm dân cứ sinh sống, các điểm dân cư nằm ở độ cao từ 1 đến N. Từ hai
điểm dân cư bất kỳ đều có đường đi đến với nhau. Để giải quyết nhu cầu nghiên cứu chống các
bệnh do một loại Virus là gây ra, lãnh đạo vùng quyết định đầu tư xây dựng một trung tâm
nghiên cứu khoa học để nghiên cứu loại vi rút này và tác hại đến nó. Virus có thể gây tác hại
trong một khoảng cách R. Khi nó gây tác hại đến 1 địa điểm, mức độ gây thiệt hại của nó sẽ
giảm đi bằng chính khoảng cách mà nó đã vượt qua. Trung tâm nghiên cứu được bảo vệ rất
nghiêm ngặt. Một tên khủng bố đặt bom tại hàng rào của trung tâm làm cho virus bị phát tán.
Ban lãnh đạo nhờ bạn tìm vị trí của trung tâm nghiên cứu sao cho nếu virus bị phát tán thì số
điểm dân cư bị thiệt hại là ít nhất và điểm đặt trung tâm nghiên cứu phải có độ cao thấp nhất.
Dữ liệu vào: File văn bản DIADIEM.INP
+ Dòng đầu ghi hai số N và R (5<N≤700) và (0<R≤18000).
+ Các dòng tiếp theo mỗi dòng ghi 3 số i, j và C với ý nghĩa khoảng cách từ điểm dân cư i
đến j là C (0<C≤20000)
Dữ liệu ra: ghi vào file văn bản DIADIEM.OUT chỉ có 1 số duy nhất ghi địa điểm trung tâm

nghiên cứu
Ví dụ:
DIADIEM.INP DIADIEM.OUT
7 35
1 2 20
1 7 30
2 3 30
2 5 30
3 4 30
3 5 40
3 7 70
4 5 60
5 6 60
5
6 7 20
Bài 3: Diện tích lớn nhất (MS0040)
Một vùng đồi hình chữ nhật không bằng phẳng được biểu diễn bằng một bản đồ độ cao. Độ
cao của các đơn vị trong khu đồi được biểu diễn bằng các chữ cái từ ‘a’ đến ‘z’. Một khu đất
được gọi là bằng phẳng khi nó chứa các ký tự cùng loại và liền kề nhau. Khu đổi được quy hoạch
xây xựng một khu vui chơi. Để đáp ứng nhu cầu nghỉ ngơi của khách tham quan cần phải xây
dựng khách sạn sao cho kích thước lớn nhất. Do yêu cầu kết cấu khách sạn phải được đặt nơi có
vị trí bằng phẳng. Kiến trúc sư đã thiết kế khách sạn có hình chữ nhật nhưng chưa xác định được
diện tích. Hãy tìm diện tích lớn nhất có thể có của khách sạn. Mỗi ký tự được xem là một đơn vị
diện tích.
Dữ liệu vào: File BANDO.INP
+ Dòng đầu 2 số M (10≤M≤255) và N (10≤N≤5000) là chiều rộng và chiều dài của vùng đồi
+ Các dòng tiếp theo là ma trận ký tự biểu diễn độ cao của các vị trí
Dữ liệu ra: File BANDO.OUT là một số nguyên duy nhất ghi diện tích lớn nhất của khách
sạn
Ví dụ:

BANDO.INP BANDO.OUT
16 3
aabbccdddddvvhha
daacccdddddkkkha
bbnnccdddddccdda
15

×