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

ĐỀ THI và đáp án HSG VÙNG DUYÊN HẢI và ĐỒNG BẰNG bắc bộ lần THỨ VII môn tin học lớp 10

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 (1.31 MB, 51 trang )

ĐỀ THI VÀ ĐÁP ÁN HSG VÙNG DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ
LẦN THỨ VII
(Đề thi do trường THPT Chuyên Thái Bình đề xuất)
Môn: Tin học – Lớp: 10
Thời gian làm bài: 180 phút
TỔNG QUAN VỀ BÀI THI
STT Tên bài File chương trình File dữ liệu vào File kết quả Điểm
1 Số may mắn LUCKY.* LUCKY.INP LUCKY.OUT 6
2 Hòn đảo ISLANDS.* ISLANDS.INP ISLANDS.OUT 7
3 Giá sách BOOKSHELF.* BOOKSHELF.INP BOOKSHELF.OUT 7
Dấu * được thay thế bởi PAS hoặc CPP của ngôn ngữ lập trình được sử dụng tương ứng là Pascal
hoặc C++
Hãy lập trình giải các bài toán sau:
Bài 1: Số may mắn
Trong lĩnh vực số học Vicky coi các số ở hệ 10 chỉ chứa các chữ số 4 và 7, tức là các
số chỉ chứa toàn số 4, chứa toàn số 7 hoặc cả 4 lẫn 7 là những số may mắn. Các số
may mắn được Vicky đánh số theo giá trị tăng dần của chúng, bắt đầu từ 1. Các số
may mắn đầu tiên là 4, 7, 44, 47, . . .
Yêu cầu: Cho số nguyên N (1 ≤ N < 10
10
). Hãy xác định số may mắn thứ N.
Dữ liệu: Vào từ file văn bản LUCKY.INP gồm một dòng chứa số nguyên N.
Kết quả: Đưa ra file văn bản LUCKY.OUT số may mắn thứ N.
Ví dụ:
LUCKY.INP LUCKY.OUT
3 44
Ràng buộc:
• Có 40% số test ứng với 40% số điểm của bài có N ≤ 200.
• Có 60% số test ứng với 60% số điểm của bài có N< 10
10
Bài 2: Hòn đảo


Hàng rào nhà Vicky được ghép liên liếp bởi N mảnh gỗ có chiều cao lần lượt là H
1
,
H
2
, , H
N
. Mỗi khi trời mưa hàng rào lại bị ngập nước, bọn kiến làm tổ dưới chân
hàng rào lại chạy tán loạn, chúng chen nhau để leo lên hàng rào, con kiến nào leo
được lên tấm gỗ càng cao thì cơ hội sống sót càng lớn. Trong cơn mưa nước cứ dâng
cao dần làm ngập dần hàng rào và hàng rào lúc này bị phân cắt thành một số “hòn
đảo” bởi nước. Khi độ cao tức thời của nước bằng với độ cao của tấm gỗ nào, tấm gỗ
đó sẽ được coi là nằm dưới nước.
Hãy tính số lượng đảo lớn nhất mà chúng ta có thể thấy tại một điểm thời gian trong
cơn mưa giông khi nước dâng lên cao dần.
Dữ liệu: vào từ file văn bản ISLANDS.INP
• Dòng 1 gồm một số nguyên dương N;
• Dòng thứ i trong N dòng tiếp theo chứa số nguyên dương H
i
(1 ≤ H
i

1000000000).
Kết quả: ghi ra file văn bản ISLANDS.OUT một số tự nhiên là số lượng hòn đảo lớn
nhất xuất hiện ở bất kì điểm nào trong cơn mưa giông.
Ví dụ:
ISLANDS.INP ISLANDS.OUT
8
3
5

2
3
1
4
2
3
4
Ràng buộc:
• Có 60% số test ứng với 60% số điểm của bài có N ≤ 1000.
• Có 40% số test ứng với 40% số điểm của bài có N≤ 100000.
Bài 3: Giá sách
Vicky có N cuốn sách và anh ta muốn đóng một tập các kệ sách để chứa tất cả các
cuốn sách này. Mỗi cuốn sách có chiều rộng Wi và chiều cao Hi. Các cuốn sách cần
được bỏ vào các kệ sách theo thứ tự. Ví dụ như kệ sách thứ nhất cần bỏ các cuốn sách
từ 1 đến k, kệ sách thứ 2 sẽ bắt đầu từ cuốn sách thứ k+1, và cứ thế tiếp tục. Mỗi kệ
sách có chiều rộng tối đa là L. Chiều cao của kệ sách bằng với chiều cao của cuốn
sách có chiều cao lớn nhất, và chiều cao của tập các kệ sách bằng với tổng chiều cao
của các kệ sách khi xếp dọc lên. Hãy giúp Vicky tính chiều cao thấp nhất có thể của
tập các kệ sách khi xếp chồng lên nhau.
Dữ liệu: vào từ file văn bản BOOKSHELF.INP
• Dòng 1 gồm 2 số nguyên dương N và L (1 ≤ L ≤ 1000000000).
• Dòng thứ i trong số N dòng tiếp theo chứa 2 số nguyên dương Hi và Wi. (1 ≤
Hi ≤ 1000000000; 1 ≤ Wi ≤L).
Kết quả: ghi ra file văn bản BOOKSHELF.OUT một số nguyên dương duy nhất là
chiều cao nhỏ nhất của tập các kệ sách.
Ví dụ:
BOOKSHELF.INP BOOKSHELF.OUT
5 10
5 7
9 2

8 5
13 2
3 8
21
Ràng buộc:
• Có 40% số test ứng với 40% số điểm của bài có N≤ 100.
• Có 60% số test ứng với 60% số điểm của bài có N≤ 2000
Hết
Hướng dẫn giải
Bài 1: Số may mắn
*Cách 1: Xét lần lượt các số tự nhiên từ i từ 1 max. Với mỗi số i, kiểm tra xem nó
có là số may mắn không. Cứ thế cho đến khi nào tìm được số may mắn thứ N >
20% test
* Cách 2: Coi số may mắn như một xâu nhị phân trong đó số 4 là bit 0; số 7 là bit 1.
Ta sẽ xây dựng đủ N số may mắn > 50% test
* Cách 3: Nhận xét: Có 2^K số may mắn có độ dài K
Do đó ta sẽ tính được số may mắn thứ N có độ dài bằng bao nhiêu(Giả sử bằng L).
Có tất cả 2^L số may mắn có độ dài L (đánh số từ 0 đến 2^L -1 : tương ứng với các
dãy nhị phân
0 000
0 001

1 1)
Ta sẽ tính xem số thứ N sẽ nằm ở vị trí nào ? Giả sử là T
Từ đó sẽ tìm được số thứ N một cách dễ dàng như sau: Trong biểu diễn nhị phân của
T (độ dài L): bít 0 thay bằng 4; bit 1 thay bằng 7.
Ví dụ; N=41
Có 2 dãy nhị phân độ dài 1
Có 4 dãy nhị phân độ dài 2
Có 8 dãy NP độ dài 3

Có 16 dãy NP độ dài 4
Có 32 dãy Np độ dài 5
2+4+8+16=30
Suy ra số may mắn thứ N có độ dài 5.
Trong 32 số có cùng độ dài 5 thì số thứ N ở vị trí T=41-30=11
Do các dãy bit đánh số từ 0 nên T:=T-1
> Số thứ N tương ứng với dãy nhị phân có số hiệu 10 (độ dài 5): 01010
> Số cần tìm là 47474
Bài 2: Hòn đảo
Ý tưởng: Ta sẽ cho nước dâng lên cao dần: đầu tiên sẽ ngập những tấm gỗ thấp nhất,
tiếp đến ngập những tấm gỗ thấp thứ hai , và đếm số đảo tại mỗi thời điểm đó và
cập nhật kết quả tối ưu.
* Cấu trúc dữ liệu:
Mảng h[1 N] lưu độ cao của các tấm gỗ
Mảng id[1 N] lưu chỉ số ban đầu của các tấm gỗ
Mảng under[1 N] đánh dấu tấm gỗ nào đã bị ngập
maxIslands: Số đảo lớn nhất mà ta có thể nhìn thấy
numIslands: Số đảo tại thời điểm hiện tại.
Khởi tạo:
maxIslands:=1; numIslands:=1;
under[i]:=false với mọi i: 1 N
* Thuật toán
- B1: Sắp xếp các tấm gỗ tăng dần theo chiều cao (có kèm chỉ số): O(nlogn)
- B2: Xử lí lần lượt các tấm gỗ theo thứ tự tăng dần của chiều cao i: 1 N (nghĩa là
nước cứ dâng cao dần lên).
Xét tấm gỗ thứ i (trong dãy đã sắp xếp): chỉ số ban đầu của tấm gỗ đó là x (lúc này
under[x]=false : tấm gỗ ở vị trí x chưa bị ngập)
B21: Đặt under[x]=true
B22: Cập nhật số đảo hiện tại:
+ Nếu x=1 hoặc x=N thì ta chỉ xét 1 tấm gỗ sát ngay bên cạnh x. Cụ thể:

Nếu (x=1 và under[x+1]=true) hoặc (x=N và under[x-1]=true) thì giảm số đảo hiện
tại đi 1
(Hiển nhiên: nếu x=1 và under[x+1]=false thì không làm thay đổi số lượng đảo hiện
tại)
+ Nếu 1<x<N thì ta xét hai tấm gỗ bên trái và bên phải x là x-1 và x+1.
Nếu cả hai tấm gỗ này đều không bị ngập thì tăng số đảo hiện tại lên 1 (phân chia 1
đảo thành 2).
Còn nếu cả hai tấm gỗ này đều bị ngập thì giảm số đảo hiện tại đi 1 (hợp nhất hai đảo
thành 1)
B23: Nếu i=N(đã xét xong tất cả các tấm gỗ) hoặc h[i+1]>h[i] (sau khi đã xét xong
các tấm gỗ có cùng độ cao thì tăng mức nước để xét các tấm gỗ cao hơn) thì ta cập
nhật kết quả tối ưu.
Kết quả: maxIslands
Bài 3: Giá sách
Quy hoạch động
Gọi C(x) là chiều cao nhỏ nhất của giá sách khi chúng ta xét x cuốn sách đầu tiên
Khởi tạo:
C(i) = +∞ với i=1…N (Có thể chọn +∞ là maxlongint)
C(0) = 0.
C(x) = min({C(y) + max(H[y+1], H[y+2], , H[x]) : 0 <= y < x and sum(W[y+1],
W[y+2], , W[x]) <= L})
Dễ thấy nếu ta tính max, min riêng biệt thì thuật toán trên là O(N^3). Tuy nhiên bằng
cách tính max và sum bằng 1 vòng lặp cho y giảm dần ta có thể giảm độ phức tạp
xuống còn O(N^2) như sau:
for i:=1 to N do C[i]:=1000000000;
C[0]:=0;
for i:=1 to N do
begin
hmax:=0; wsum:=0;
for j:=i downto 1 do

begin
wsum:=wsum+W[j];
if hmax<H[j] then hmax:=H[j];
if wsum<=L then
if C[i]>hmax+C[j-1] then C[i]:=hmax+C[j-1];
end;
end;
Trong đó: hmax là chiều cao của cuốn sách cao nhất trong phạm vi từ j…i
Wsum là tổng chiều dài của các cuốn sách trong phạm vi từ j…i
TRƯỜNG THPT
ĐỀ THI HỌC SINH GIỎI
VÙNG DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ
CHUYÊN HẠ LONG
LẦN THỨ VII
Môn: TIN HỌC
Thời gian: 180 phút (không kể thời gian giao đề)
Ngày thi: / /2014
(Đề thi có 03 trang, gồm 03 bài)
TỔNG QUAN VỀ ĐỀ THI
Tên bài File chương trình File dữ liệu vào File dữ liệu ra
Bài 1 Giả số nguyên tố PSEPRIME.* PSEPRIME.INP PSEPRIME.OUT
Bài 2 Siêu thị BigC BIGC.* BIGC.INP BIGC.OUT
Bài 3 Xây cầu BRIDGE.* BRIDGE.INP BRIDGE.OUT
Dấu * được thay thế bởi PAS hoặc CPP của ngôn ngữ lập trình được sử dụng
tương ứng là Pascal hoặc C++.
Hãy lập trình giải các bài toán sau:
Bài 1. (6,0 điểm) Giả số nguyên tố
Giả sử b là một số nguyên dương. Nếu p là hợp số nguyên dương và b
p
chia cho p

được số dư là b thì p được gọi là giả số nguyên tố cơ sở b.
Yêu cầu: Cho n là một số nguyên dương hãy liệt các giả số nguyên tố cơ sở 2 trong
phạm vi từ 1 đến n.
Dữ liệu: Vào từ file văn bản PSEPRIME.INP gồm một dòng chứa số nguyên
dương � ≤ 10
6
.
Kết quả: Ghi ra file văn bản PSEPRIME.OUT là các giả số nguyên tố cơ sở 2 trong
phạm vi từ 1 đến n, mỗi số ghi trên một dòng theo thứ tự tăng dần. Nếu không tìm
được số thỏa mãn yêu cầu, ghi ra số 0.
Ví dụ:
PSEPRIME.INP PSEPRIME.OUT
1000 341 561 645
Bài 2. (7,0 điểm) Siêu thị BigC
Ngày nghỉ cuối tuần An được mẹ cho đi siêu thị BigC để mua thực phẩm để dự trữ
trong một tuần, vì mẹ An phải đi công tác dài ngày trong tuần tới. Sau khi chọn đủ
các gói hàng cần mua, thanh toán tiền xong và đến lúc cần đóng hàng vào hộp để
mang về nhà. Số gói hàng mà hai mẹ con chọn mua là n gói với kích thước k
1
,
k
2
, ,k
n
. An có nhiệm vụ giúp mẹ đóng những gói hàng này vào những chiếc hộp giấy
bìa cứng. Biết rằng siêu thị chỉ còn những chiếc hộp có kích thước m thỏa mãn k
i
≤ m
(i = 1,2, ,n). Hỏi An cần ít nhất bao nhiêu hộp để có thể đóng đủ các gói hàng mang
về?

Dữ liệu: Vào từ file văn bản BIGC.INP
• Dòng 1: Chứa hai số nguyên � và m (1 ≤ � ≤ 100, m ≥ 1000)
• Dòng 2: Chứa � số nguyên dương k
1
, k
2
, … , k

(1 ≤ k
i
≤ 1000, với
mọi i = 1,2, n)
Kết quả: Ghi ra file văn bản BIGC.OUT gồm một số nguyên duy nhất là số hộp ít
nhất cần phải lấy.
Các số trên một dòng của Input files được ghi cách nhau ít nhất một dấu cách.
Ví dụ:
BIGC.INP BIGC.OUT
6 200
30 70 150 80 120 75
3
Bài 3. (7,0 điểm) Xây cầu
Hai nước Anpha và Beta nằm ở hai bên bờ sông Omega. Anpha nằm ở bừ Bắc và có
M thành phố được đánh số từ 1 đến M, Beta nằm ở bờ Nam và có N thành phố được
đánh số từ 1 đến N (theo vị trí từ Đông sang Tây). Mỗi thành phố của nước này
thường quan hệ kết nghĩa với một số thành phố của nước kia. Để tăng cường tình hữu
nghị , hai nước muốn xây dựng các cây cầu bắc qua sông, mỗi cây cầu là nhịp nối
giữa hai thành phố kết nghĩa. Với yêu cầu là các cây cầu không được cắt nhau và mỗi
thành phố chỉ là đầu cầu cho nhiều nhất một cây cầu. Hiện đã có sẵn K chiếc cầu nối
giữa các thành phố kết nghĩa của hai nước, K chiếc cầu này đã thỏa mãn yêu cầu trên.
Yêu cầu: Hãy cho biết số cầu tối đa mà hai nước có thể xây dựng thêm, sao cho các

cây cầu mới xây cùng với K chiếc cầu có sẵn cũng thỏa mãn yêu cầu của hai nước.
Dữ liệu: Vào từ file văn bản BRIDGE.INP
• Dòng thứ nhất chứa 3 số M, N, K (0 ≤ M, N ≤ 1000; 0 ≤ K ≤ 100).
• K dòng tiếp theo mỗi dòng chứa 2 số nguyên dương x và y thể hiện đã có cầu
nối giữa thành phố x của nước Alpha với thành phố y của nước Beta. K dòng
này được sắp theo thứ tự từ nhỏ tới lớn của x.
• Các dòng tiếp theo mỗi dòng chứa hai số nguyên dương i và j thể hiện thành
phố i của nước Alpha kết nghĩa với thành phố j của nước Beta nhưng chưa có
cầu nối giữa chúng. Dòng cuối cùng chứa 2 số 0, 0 thể hiện kết thức tệp.
Các số trên một dòng của Input files được ghi cách nhau ít nhất một dấu cách.
Kết quả: Ghi ra file văn bản BRIDGE.OUT gồm một số nguyên duy nhất là số cầu
tối đa mà hai nước có thể xây thêm.
Ví dụ:
BRIDGE.INP BRIDGE.OUT
3 4 1
3 3
2 4
3 1
1 2
0 0
1
Hết
• Thí sinh không được sử dụng tài liệu.
• Cán bộ coi thi không giải thích gì thêm.
TRƯỜNG THPT
CHUYÊN HẠ LONG
HƯỚNG DẪN CHẤM THI HỌC SINH GIỎI
VÙNG DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ
LẦN THỨ VII
Môn: TIN HỌC

Ngày thi: / /2014
(Gồm 02 trang)
TỔNG QUAN VỀ ĐỀ THI
Tên bài File chương trình File dữ liệu vào File dữ liệu ra
Bài 1 Giả số nguyên tố PSEPRIME.* PSEPRIME.INP PSEPRIME.OUT
Bài 2 Siêu thị BigC BIGC.* BIGC.INP BIGC.OUT
Bài 3 Xây cầu BRIDGE.* BRIDGE.INP BRIDGE.OUT
Bài 1. (6 điểm) Số giả nguyên tố
Bài toán có 40 test, giới hạn thời gian mỗi test 1 giây.
Thuật toán 1:
Bước 1. Sử dụng công thức (A × B) mod C = ((A mod C) ×(B mode C)) mode C để
tính 2
p
mod p.
Bước 2. Sử dụng sàng nguyên tố để đánh dấu các số nguyên tố trong phạm vi từ 1
đến n.
Bước 3. So khớp, kiểm tra lần lượt từng số từ 1 đến n.
Với thuật toán này độ phức tạp O(n
2
) sẽ có được 60% số test ứng với 60% số điểm
của bài có n ≤100000.
Thuật toán 2:
Tương tự như thuật toán 1, có sử dụng kỹ thuật chia để trị để tính 2
n
mod n. Trong
bước 3, ta chỉ cần kiểm tra các số lẻ trong phạm vi từ 1 đến n.
Với thuật toán này độ phức tạp O(nlogn) có thể được 100% số điểm của bài toán.
Bài 2. (7 điểm) Siêu thị BigC
Bài toán có 40 test, giới hạn thời gian mỗi test 1 giây.
Thuật toán 1:

Dùng mô hình đề quy để liệt kê tất cả các hoán vị của 1,2, ,n. Với mỗi hoán vị tương
ứng với một cách đóng các gói hàng vào hộp, lần lượt đóng các gói hàng vào hộp
theo đúng thứ tự hoán vị, chỉ chuyển sang hộp mới khi hộp hiện tại không thể chứa
thêm.
Với thuật toán này độ phức tạp O(n.n!) sẽ có được 50% số test ứng với 50% số điểm
của bài có n ≤ 10.
Thuật toán 2:
Sắp xếp các gói hàng theo kích thước giảm dần, tiến hành đóng các gói vào hộp. Với
mỗi hộp, duyệt lần lượt các gói hàng (theo thứ tự đã sắp xếp), gói nào còn có thể
chứa được vào hộp thì cho vào luôn.
Với thuật toán này độ phức tạp O(nlogn) có thể được 100% số điểm của bài toán.
Bài 3. (7 điểm) Xây cầu
Bài toán có 40 test, giới hạn thời gian mỗi test 1 giây.
Thuật toán 1:
Dùng mô hình đề quy để liệt kê tất cả các hoán vị của tất cả các cặp thành phố có
quan hệ kết nghĩa. Với mỗi hoán vị tương ứng với một cách xây cầu, lần lượt xây cầu
theo đúng thứ tự hoán vị, chỉ xây thêm cầu khi chiếc cầu đó thỏa mãn yêu cầu. Trong
tất cả các cách đó chọn ra cách có số cầu xây thêm nhiều nhất.
Với thuật toán này độ phức tạp O(n.n!) sẽ có được 30% số test ứng với 50% số điểm
của bài có n ≤ 10.
Thuật toán 2:
Sử dụng thuật toán Quy hoạch động. Gọi F[i, j] là số cầu tối đa có thể xây trên đoạn
sông gồm các thành phố a
1
, a
2
, ,a
i
của Alpha và b
1

, b
2
, ,b
j
của Beta, ta có công thức
quy hoạch động như sau:
• F[0, j] = F[i, 0] = 0 với i = 1 m, j = 1 n.
• F[i, j] = max(F[i-1, j], F[i, j-1], F[i-1, j-1]) nếu thành phố i không kết nghĩa với
thành phố j hoặc không thể xây cầu nối thành phố i với thành phố j thỏa mãn
yêu cầu.
• F[i, j] = max(F[i-1, j], F[i, j-1], F[i-1, j-1]+1) nếu thành phố i kết nghĩa với
thành phố j và có thể xây cầu nối thành phố i với thành phố j thỏa mãn yêu cầu.
Kết quả của bài toán là F[m, n].
Với thuật toán này độ phức tạp O(n
2
) có thể được 100% số điểm của bài toán.
Hết
Tổng quan đề thi
Stt Tên bài Tên file chương trình Tên file dữ
liệu vào
Tên file kết quả
ra
Điểm Thời
gian
1 Icons Icons.* Icons.inp Icons.out 6 1 giây
2 Clock Clock.* Clock.inp Clock.out 7 1 giầy
3 Duhanh Duhanh.* Dunhanh.inp Duhanh.out 7 1 giây
Dấu ‘*’ được thay thế bởi PAS hoặc CPP của ngôn ngữ lập trình Pascal hoăc C.
Bài 1. Icons
Dave có một bộ sưu tập gồm N viên đá quý. Anh muốn sắp xếp chúng trên một bảng

gồm hàng và cột theo cách tổng số hàng và cột là ít nhất có thể. Hãy viết một chương trình
giúp Dave tìm cách xếp như vậy
SỞ GIÁO DỤC & ĐÀO TẠO THÁI NGUYÊN
TRƯỜNG THPT CHUYÊN THÁI NGUYÊN
Đề đề xuất
Giáo viên: Đỗ Thị Linh
ĐỀ GIỚI THIỆU THI HỌC GIỎI DHBB
Môn: Tin hoc
Lớp: 10
Năm học: 2013 - 2014
Dữ liệu vào: trong file Icons.inp: Dòng đầu tiên và là dòng duy nhất chứa một số tự
nhiên N (1 ≤ N ≤ 100), là số viên đá để sắp xếp. Sự sắp xếp không cần chia đều cho hàng và
cột, một vài chỗ trên hàng có thể không có đá.
Dữ liệu ra: trong file Icons.out: Dòng đầu tiên và duy nhất chứa số hàng và số cột.
Các số cách nhau bởi một dấu cách.
Ví dụ :
Ràng buộc : có 50% số test ứng với 50% số điểm của bài có n<=50
Bài 2. Clock
Một hôm, Dave tạo một đồng hồ kỹ thuật số. Mỗi số trong bốn số dùng để hiển thị thời
gian (định dạng: hh:mm) được đại diện với 15 điốt đỏ đèn LED được sắp xếp trong một ma
trận 5x3 như hình dưới đây ('#' đại diện cho điốt sáng , và ‘.’ Đại diện cho điốt không
có ánh sáng '.').
###
#.#
#.#
#.#
###
#
#
#

#
#
###
#
###
#
###
###
#
###
#
###
#.#
#.#
###
#
#
###
#
###
#
###
###
#
###
#.#
###
###
#
#

#
#
###
#.#
###
#.#
###
###
#.#
###
#
###
Dave thiết lập thời gian chính xác trên đồng hồ mới của mình, rồi ông ngủ quên.
Khi ông tỉnh dậy sáng hôm sau, ông nhìn đồng hồ mới của mình và phát hiện ra rằng
một số các điốt ngừng hoạt động.
Viết một chương trình xác định thời gian sớm nhất có thể tương ứng với màn hình
hiển thị đồng hồ bị lỗi của Dave.
Icons.inp Icons.inp Icons.inp
2 5 14
Icons.out Icons.out Icons.out
1 2 3 2 4 4
Dữ liệu vào: Gồm 4 ma trận 5x3 chứa các kí tự ‘#’ và ‘.’ Cách nhau bởi một cột
dấu cách dùng để hiển thị đồng hồ bị lỗi của Dave.
Dữ liệu ra: Dòng đầu tiên và duy nhất của tập tin đầu ra là thời gian tìm được.
Ví dụ:
CLOCK.INP
#.# #
#.# #
#.# ### ### ###
#.# # # #

### ### ### #
CLOCK.OUT
02:34
CLOCK.INP
### ### #
#.# #.# #.#
### #.# .#. .#.
# #.# # #
### #.# # ###
CLOCK.OUT
20:48
CLOCK.INP
# #.# #.# .#.
# # #
#.# .## ### .##
# #.#
#.# ### ##. ###
CLOCK.OUT
06:25
Bài 3 duhanh
Đoàn du hành có nhiệm vụ xuất phát từ hành tinh s tìm cách tốn ít năng lượng
nhất để đến được hành tinh e. Mỗi hành tinh có mã số là một dãy nhị phân dài n (gồm
các giá trị 0 và 1). Biết
• Từ hành tinh x có thể đến được hành tinh y nếu x và y khác nhau tại đúng 1 vị
trí.
• Mỗi khi hạ cánh xuống hành tinh y = (y
1
, y
2
, , y

n
) thì năng lượng chi phí sẽ là
p
1
y
1
+ p
2
y
2
+ + p
n
y
n
.
Input: trong file duhanh.inp
- Dòng thứ nhất: ba giá trị n s e; 1 ≤ n ≤ 1000.
- Dòng thứ hai: n giá trị p
1
p
2
p
n
là các chi phí tương ứng với vị trí thứ i trong
mã số hành tinh.
Output: trong file duhanh.out
Gồm một dòng duy nhất hiển thị chi phí nhỏ nhất để di chuyển từ hành tinh s
đến hành tinh e.
Ví dụ
duhanh.inp duhanh.out

3 110 011
3 1 2
4
Ràng buộc : có 70% số test ứng với 70% số điểm của bài có n<=100
Hết
Hướng dẫn giải
Bài 1 duyệt toàn bộ
Cho i chạy từ 2 đến trunc(sqrt(n)) và thử j= n div i. Nếu i*j<n thì tăng j
Bài 2
Duyệt toàn bộ
Khai báo mảng hằng tgian : array[0 9] of string[15] để lưu các con số hiển thị thời
gian từ 0 9
Khai báo một mảng gồm bốn số để lưu thời gian trong file input : (hhmm)
Cho giờ chạy từ 0 đến 23 phút chạy từ 0 đến 59
Duhanh.inp duhanh.out
5 00000 11111
1 2 3 4 5
35
So sánh i :hh với thời gian cho trước có thỏa mãn không. J : mm với thời gian cho
trước có thỏa mãn không
Nếu thỏa mãn thì xuất i và j
Vì i chạy từ bé đến lớn, j chạy từ bé đến lớn nên luôn tìm được thời gian sớm nhất có
thể.
Bài 3.
Sub 1: vét cạn bằng đệ quy quay lui kết hợp nhánh cận
Sub 2:
Thuật toán Quy hoạch động.
Ta phát biểu lại bài toán như sau:
Cho 2 xâu bit 0/1 s và e cùng chiều dài n bit. Cần tính chi phí thấp nhất để biến đổi s
thành e theo các điều kiện sau:

• Mỗi bước biến đổi chỉ được phép đảo duy nhất 1 bit.
• Mỗi khi biến đổi xâu x[1 n] thành xâu y[1 n] thì phải trả thêm chi phí Cost(y)
được tính bằng tổng các giá trị p[i] ứng với vị trí y[i] = ‘1’, 1 ≤ i ≤ n.
Ta giả thiết là các chi phí tại thành phần i, p[i] được sắp tăng và các xâu s và e
cũng được sắp tương ứng theo p.
Gọi c(i) là hàm chi phí thấp nhất khi phải biến đổi đoạn xâu bit (tiền tố) s[1 i]
thành xâu bit e[1 i], b(i) là hàm cho số bước ứng với phép biến đổi đoạn xâu bit
s[1 i] thành xâu bit e[1 i] theo cách trên, v(y,i) là tổng các giá trị p[k] ứng với vị trí
y[k] = ‘1’, 1 ≤ k ≤ i. v(y,i) chính là chi phí phải trả khi hạ cánh xuống hành tinh có mã
y[1 i]. Ta kí hiệu A và B là hai tiền tố gồm i-1 giá trị đầu của s và e, tức là A = s[1 i-
1], B = e[1 i-1]. Ta xét bit i theo 4 trường hợp a, b, c và d sau đây:
a) A0, B0 tức là s[i] = ‘0’ và e[i] = ‘0’: Ta chỉ cần biến đổi A→B là hoàn tất. Ta có
• Số bước cần thiết: b(i) = b(i-1);
• Chi phí: c(i) = c(i-1).
b) A0, B1 tức là s[i] = ‘0’ và e[i] = ‘1’: Trước hết ta biến đổi A→B, giữ nguyên s[i] =
0 sau đó biến đổi thêm 1 bước để lật s[i] từ ‘0’ sang 1 với chi phí v(e,i). Ta có
• Số bước cần thiết: b(i) = b(i-1)+1;
• Chi phí: c(i) = c(i-1) + v(e,i).
c) A1, B0 tức là s[i] = ‘1’ và e[i] = ‘0’: Trước hết ta lật s[i] từ ‘1’ thành ‘0’ với chi phí
v(s,i-1) sau đó biến đổi A→B. Ta có
• Số bước cần thiết: b(i) = b(i-1)+1;
• Chi phí: c(i) = c(i-1) + v(s,i-1).
d) A1, B1 tức là s[i] = ‘1’ và e[i] = ‘1’: Ta cần chọn chi phí min theo hai khả năng d.1
và d.2 sau đây:
15
d.1 Giữ nguyên s[i] và e[i], chỉ biến đổi A→B
• Số bước cần thiết: b(i) = b(i-1);
• Chi phí: c(i) = c(i-1) + b(i)*p[i].
d.2 Trước hết biến đổi để lật s[i] từ ‘1’ thành ‘0’, sau đó biến đổi A→B, cuối cùng
lật lại s[i] từ ‘0’ thành ‘1’

• Số bước cần thiết: b(i) = b(i-1)+2;
• Chi phí: c(i) = v(s,i-1) + c(i-1) + v(e,i).
Khi tính toán ta cũng tranh thủ tính dần các giá trị vs = v(s,i-1) và ve = v(e,i).
SỞ GD&ĐT HÀ NAM
Trường THPT chuyên Biên Hòa
Người ra đề: Lê Thị Hải Hằng
Nguyễn Thị Hồng Nhớ
ĐỀ THI HỌC SINH GIỎI CÁC TRƯỜNG CHUYÊN
KHU VỰC DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ
NĂM 2014
Môn: Tin học lớp 10
Thời gian làm bài: 180 phút

Tổng quan về đề thi:
Bài Tên file bài làm Tên file dữ liệu Tên file kết quả Thời gian/test
1 DAYSO.* DAYSO.INP DAYSO.OUT 1s
2 FBIRD.* FBIRD.INP FBIRD.OUT 1s
3 LINHVAT.* LINHVAT.INP LINHVAT.OUT 1s
Phần đuôi tên file bài làm .* có thể là PAS hoặc CPP.
Bài 1: Dãy số(6 điểm)
Bờm rất thích những tính chất thú vị của các dãy số. Bố cậu biết vậy nên đã đố
cậu giải được bài toán sau:
Cho 1 dãy số
Đặt X= (a
n+1
– a
n
)
2
. Hỏi rằng chữ số cuối cùng của số X là số nào?

Bờm đang cố gắng suy nghĩ để tìm ra cách giải. Bạn là một lập trình viên giỏi nên bạn
hãy giúp cậu ấy giải bài toán trên.
Dữ liệu vào: DAYSO.INP
- Dòng đầu ghi số K (K∈Z, 1 ≤ K ≤ 1000).
- K dòng tiếp theo, mỗi dòng có 1 giá trị duy nhất là số nguyên dương n (với n≤10
15
).
Dữ liệu ra: DAYSO.OUT
Gồm k dòng, mỗi dòng ghi một chữ số duy nhất tìm được ứng với dòng có giá trị n
trong file dữ liệu vào.
Ví dụ:
DAYSO.INP DAYSO.OUT
16
2
1
4
4
5
Ghi chú: Thời gian giới hạn chạy mỗi test là 1 giây.
60% số test có n ≤10000.
Bài 1: Búng chim (7 điểm)
Bạn biết gì về trò chơi “Made in Việt Nam” Flappy Bird của tác giả Nguyễn Hà
Đông? Hôm nay, chúng ta làm quen với phiên bản 2 của trò chơi này nhé.
Cho m hàng, mỗi hàng có n trụ đồng, khoảng cách giữa các trụ coi như không đáng
kể. Trụ ở hàng i cột j có độ cao h
ij
.
Chú chim Flappy xuất phát ở mặt đất (độ cao bằng 0) và dự trữ W đơn vị năng lượng,
mỗi lần nhảy từ ví trí này đến vị trí khác chú bị tiêu hao một năng lượng đúng bằng độ
cao của vị trí nhảy tới. Nhiệm vụ của chú chim ở phiên bản này là phải nhảy qua n trụ

ở n cột khác nhau, mỗi lần chú chỉ có thể nhảy tới bất kỳ một trụ nào đó của cột kế
tiếp.
Bờm và các bạn trong lớp mới tham gia và rất hứng thú với trò chơi này. Để chứng tỏ
khả năng không “yếu kém”, Bờm muốn chú chim Flappy của mình nhảy từ trụ này tới
trụ khác sao cho độ cao của các trụ không giảm và tổng độ cao các trụ là lớn nhất có
thể.
Bạn hãy giúp Bờm chỉ ra hành trình của chú chim Fllapy.
Dữ liệu vào: FBIRD.INP
- Dòng đầu chứa ba số n, m, W
- M dòng sau, dòng thứ I+1 (i=1 n), ghi n số h
i1,
h
i2
,…, h
in.
Dữ liệu ra: FBIRD.OUT
Nếu không tồn tại đáp số ghi ra số -1, ngược lại bạn ghi một số nguyên là tổng độ cao
lớn nhất của các trụ chú chim Flappy nhảy qua.
Ví dụ:
FBIRD.INP FBIRD.OUT FBIRD.INP FBIRD.OUT
2 3 10
2 7 6
4 3 5
10
{Chú thích:
(1,1) (2,2)
(2,3)}
2 3 7
7 1 3
2 5 6

-1
Các giới hạn:
- 1≤W≤100 000
- 1≤M, N≤ 20
- 1≤H
ij
≤ 1 000
- 30% số test đầu có 1≤M, N≤ 10
- 30% số test tiếp theo có 1≤M, N≤ 15
- 40% số test cuối có 1≤M, N≤ 20
Bài 3: (7 điểm) Mua linh vật
Vua Hùng tổ chức một cuộc thi tài để kén Phò Mã cho công chúa Mị Nương.
Các chàng trai tham dự cuộc thi sẽ phải mang đầy đủ sính lễ đến theo yêu cầu của nhà
17
Vua. Sính lễ bắt buộc phải là n loại linh vật của n ngôi làng trong đất nước. Chàng trai
thông minh nhất là người mang đầy đủ sính lễ đến với số tiền bỏ ra là ít nhất và sẽ
được kết duyên cùng công chúa Mị Nương.
Vào thời đó, cả nước có tất cả 2n ngôi làng trong đó n ngôi làng nằm bên trái
của con sông X, và n ngôi làng còn lại nằm ở bên phải của sông X. Ở hai bên sông,
các ngôi làng được đánh số lần lượt từ 1 đến n theo thứ tự từ ngôi làng ở đầu sông đến
ngôi làng ở cuối sông. Một ngôi làng chỉ có một loại linh vật. Giả sử không giới hạn
số lượng linh vật của từng loại linh vật. Để có được 1 loại linh vật thì các chàng trai
phải mua và trả một số tiền bằng giá trị 1 linh vật của loại linh vật đó.
Mỗi chàng trai được chọn nơi xuất phát là ngôi làng có số thứ tự 1 ở một trong
hai bờ sông và từ đó đi tiếp tới các ngôi làng khác. Tới ngôi làng nào thì sẽ mua 1 linh
vật của ngôi làng đó. Mua xong linh vật ở ngôi làng thứ i rồi thì phải di chuyển tới
ngôi làng thứ i+1 ở một trong 2 bờ sông. Ngoài số tiền phải bỏ ra để mua linh vật,
người mua phải trả thêm chi phí di chuyển từ ngôi làng này tới ngôi làng khác.
Chi phí di chuyển được tính như sau: Giữa hai ngôi làng liên tiếp trên cùng một
bờ sông coi chi phí bằng 0. Giữa hai ngôi làng ở hai bên bờ sông khác nhau thì chi phí

là một số nguyên dương M (M không phụ thuộc vào số thứ tự của 2 ngôi làng).
Các chàng trai sau khi mua đủ sính lễ theo yêu cầu thì sẽ mang sính lễ đó dâng
lên nhà Vua tại địa điểm đã được quy định trước là ngôi làng thứ n của bờ sông bên
phải. Sơn Tinh đang đau đầu suy nghĩ giải bài toán khó này. Bạn là một lập trình viên
đang tham dự kỳ thi Olympic Tin học vùng đồng bằng Sông Hồng và duyên hải Bắc
Bộ. Bạn hãy giúp Sơn Tinh giải bài toán của Vua Hùng nhé.
Cho N, M và giá trị của các loại linh vật ở hai bên bờ sông.
Yêu cầu: Hãy đưa ra số tiền ít nhất phải trả để có thể mua được N loại linh vật theo
yêu cầu của nhà Vua?
Dữ liệu vào: LINHVAT.INP
Gồm 3 dòng:
Dòng đầu tiên ghi 2 số nguyên N, M (1≤ N ≤ 10
5
, 1≤ M≤ 10
9
)
Dòng thứ 2 ghi N số nguyên: a
1
, a
2
, …., a
n
theo thứ tự là giá trị N loại linh vật của
các ngôi làng từ 1 đến n ở bờ sông bên trái.
Dòng thứ 3 ghi N số nguyên: b
1
, b
2
, …., b
n

theo thứ tự là giá trị N loại linh vật
của các ngôi làng từ 1 đến n ở bờ sông bên phải.
(0 < a
i
, b
i
≤ 10
9
; a
i
, b
i
∈ Z với mọi i∈[1 n])
Các số trên cùng 1 dòng cách nhau ít nhất một dấu cách.
Dữ liệu ra: LINHVAT.OUT
Gồm 1 dòng duy nhất là số tiền ít nhất phải trả để mua N loại linh vật theo yêu cầu của
nhà Vua.
Ví dụ:
LINHVAT.INP LINHVAT.OUT
5 6
4 9 18 7 5
15 10 3 24 1
42
Ghi chú: Thời gian giới hạn chạy mỗi test là 1 giây.
30% số test có n≤1000.
30% số test có n≤5000
18
40% số test có n≤100000
Giải thích ví dụ: đi từ ngôi làng 1 ở bờ bên trái  ngôi làng thứ 2 ở bờ trái  ngôi
làng thứ 3 ở bờ phải  ngôi làng thứ 4 ở bờ trái  ngôi làng thứ 5 của bờ phải.

Tổng chi phí = 4 + 9 + 6 (do đổi bờ) + 3 + 6 (do đổi bờ) + 7 + 6(do đổi bờ) +1 = 42
HẾT
SỞ GD&ĐT HÀ NAM
Trường THPT chuyên Biên Hòa
Người ra đề: Lê Thị Hải Hằng
Nguyễn Thị Hồng Nhớ
ĐÁP ÁN ĐỀ THI HỌC SINH GIỎI CÁC TRƯỜNG CHUYÊN
KHU VỰC DUYÊN HẢI VÀ ĐỒNG BẰNG BẮC BỘ
NĂM 2014
Môn: Tin học lớp 10
Thời gian làm bài: 180 phút

Hướng dẫn thuật toán
Bài 1: Dãy số (6 điểm)
Đặt b
n
= a
n+1
- a
n
Từ giả thiết ta có a
n+1
– a
n
= a
n
– a
n-1
+1
Do đó b

n
= b
n-1
+ 1
Từ đó ta tìm được b
n
= 1+n ( do (b
n
) là cấp số cộng với công sai bằng 1 và b
0
= 1)
Như vậy X = (b
n
)
2
= (1+n)
2
Để tìm chữ số cuối cùng của X ta chỉ cần quan tâm tới chữ số cuối cùng của 1+n. Giả sử chữ số cuối
cùng của 1+n là c, thì chữ số cuối cùng của X sẽ là chữ số hàng đơn vị của c
2
.
Bài 2: Búng chim (7 điểm)
Nghiệm của bài toán có dạng x
1
x
2
…x
n
, trong đó x
i

là độ cao của trụ ở cột thứ i.
P[i]=x
1
+…x
i
: Năng lượng đã tiêu thụ của Flappy khi đến cột i
Điều kiện:
• Dãy x
1,
x
2
, …, x
n
không giảm, x
i
nhận 1 trong các giá trị h
1i
h
mi
• P
n
<=W và lớn nhất có thể
+ Cách 1: Thuật toán quay lui vét cạn mọi khả năng (30%).
+ Cách 2: Thuật toán nhánh cận (60%):
Tại bước thứ i, tính được tổng độ cao của n trụ nhỏ nhất là S
min
=P[i]+(n-i)*x
i
- Nếu S
min

<=W: duyệt tiếp vì bài toán có thể có nghiệm .
Nếu P
n
>max thì max:=P
n
. (Max là tổng độ cao lớn nhất của các trụ, khởi tạo max:=-1).
+ Nhánh cận (100%)
Đánh giá thêm: Nếu P
n
=W thì kết luận bài toán có nghiệm, tổng độ cao lớn nhất của các trụ
là W và dừng chương trình.
Bài 3: Mua linh vật (7 điểm)
Thuật toán: Quy hoạch động
- Gọi T[i,j] là chi phí ít nhất để có i loại linh vật, người mua đi từ ngôi làng có số hiệu 1 đến số hiệu i
và đang ở phía bờ sông bên j (j=1: bờ bên trái, j=0: bờ bên phải)
Ta có:
T[0, 1]=T[0,0] = 0
For i:=1 to n do
Begin
T[i, 1]:= min( T[i-1,1] + a[i], T[i-1,0] + a[i] + M);
T[i,0]:= min (T[i-1,0]+b[i], T[i-1,1] + b[i] + M);
End;
Output min(T[n, 1] + M, T[n, 0])
HỘI CÁC TRƯỜNG THPT
CHUYÊN
KHU VỰC DH & ĐB BẮC BỘ
KÌ THI CHỌN HỌC SINH GIỎI
KHU VỰC MỞ RỘNG NĂM HỌC 2013- 2014
MÔN THI: TIN HỌC LỚP 10
19

Ngày thi: 20 tháng 4 năm 2014
(Thời gian làm bài 180 phút không kể thời gian giao
đề)
Đề thi gồm 02 trang
Tổng quan bài thi:
Bài - Tên bài Tên tệp chương trình Tên tệp dữ liệu Tên tệp kết quả
Bài 1: Phân tích số NGUYENTO.PAS NGUYENTO.INP NGUYENTO.OUT
Bài 2: Camera theo dõi CAMERA.PAS CAMERA.INP CAMERA.OUT
Bài 3: Tìm vàng GOLD.PAS GOLD.INP GOLD.OUT
Học sinh dùng ngôn ngữ lập trình Pascal viết chương trình giải các bài toán sau:
Bài 1 (6 điểm). Phân tích số
Cho số nguyên dương M. Hỏi có thể phân tích M thành tổng của 2 hoặc 3 số nguyên tố khác
nhau được không?
Dữ liệu: vào từ tệp văn bản NGUYENTO.INP gồm 1 số nguyên dương M (M ≤ 10
4
)
Kết quả: ghi ra tệp văn bản NGUYENTO.OUT gồm 1 số là số cách phân tích N thành tổng của 2
hoặc 3 số nguyên tố khác nhau.
Ví dụ:
NGUYENTO.INP NGUYENTO.OUT Giải thích
10 2 1. 10 = 3 + 7
2. 10 = 2 + 3 +5
Bài 2 (7 điểm). Camera theo dõi
Trong đoạn đường từ thành phố A đến thành phố B có N nút giao thông đánh số từ 1 đến N (với AB
là một đoạn thẳng). Cần bố trí các camera theo dõi hoạt động giao thông tại các nút này. Mỗi camera
đặt ở vị trí nào đó có thể theo dõi được hoạt động giao thông trên những điểm ở cách nó không quá r
(km). Biết d
i
(km) là khoảng cách từ nút giao thông A đến nút giao thông thứ i (i=1, 2, , N).
Yêu cầu: Tìm cách đặt một số ít nhất các camera để có thể theo dõi được hoạt động giao thông trên

đoạn đường từ A đến B (mỗi nút phải nằm trong tầm theo dõi của ít nhất một trong số các camera
được bố trí).
Dữ liệu: Vào từ file văn bản CAMERA.INP gồm:
- Dòng đầu tiên ghi số nguyên dương N (N < 100) và số thực r.
- Dòng thứ i trong số N dòng tiếp theo ghi số thực d
i
(i=1, 2, , N) là một trong những
khoảng cách từ thành phố A đến một nút giao thông bất kỳ.
Kết quả: Ghi ra file văn bản CAMERA.OUT gồm:
- Dòng đầu tiên ghi k là số lượng máy theo dõi cần đặt.
- Dòng thứ i trong số k dòng tiếp theo ghi S
i
là khoảng cách từ A đến vị trí đặt camera thứ i
(các camera đặt theo thứ tự sao cho: S
1
< S
2
< … < S
k
)
Ví dụ:
CAMERA.INP CAMERA.OUT
7 0.7
0.5
1.2
1.5
2.5
3.4
3
1.2

3.2
4.7
20
THPT CHUYÊN
BẮC GIANG
ĐỀ ĐỀ XUẤT
2.6
4.7
Bài 3 (7 điểm). Tìm vàng
Tương truyền rằng, ngày xưa có một mưu sĩ thấy dân chúng quá nghèo khổ nên ông ta đã đến
thách đố đánh cờ cùng nhà vua nhằm lấy thóc trong kho đem phân phát cho dân nghèo. Nhà vua ra
điều kiện nếu đánh thua nhà vua thì mưu sĩ sẽ bị chém đầu, ngược lại mưu sĩ sẽ được trọng thưởng
bằng vật chất. Nếu đánh thắng cờ với nhà vua, mưu sĩ chỉ xin một điều đó là trong mỗi ô cờ gồm 8x8
ô thì lần lượt bỏ vào ô thứ 1: 1 hạt thóc, ô thứ 2: 1x2 hạt thóc, ô thứ 3: 1x2x3 hạt thóc,… cho đến ô
cuối cùng. Nhà vua nghe qua rất khoái chí và đồng ý ngay. Sau lần đấu cờ đó nhà vua đã mất rất
nhiều kho lương thực cho dân nghèo.
Do bản tính hiếu thắng của nhà vua, ông vẫn tiếp tục thách đấu với những tay cao thủ cờ khác
trong thiên hạ nhưng bây giờ rút kinh nghiệm ông chỉ xuất trong kho ra bây giờ không phải là thóc
nữa mà là vàng. Nguyên tắc để nhận được vàng sau khi đánh thắng nhà vua như sau:
1. Mỗi ô trong bàn cờ có một số. Con số này được gán vào như sau:
- Ô số 1: 1
- Ô số 2: 1x2 = 2
- Ô số 3: 1x2x3 = 6
… …
- Ô số 10 1x2x3x….x10 = 3 628 800
… …
- Ô số 21 1x2x3x….x21 = 51 090 942 171 709 440 000
… …
2. Số vàng nhận được chính là con số khác không đầu tiên kể từ hàng đơn vị lên phía trước
của ô mà đối thủ sẽ chọn. Ví dụ, chọn ô số 10 thì sẽ được 8 lạng vàng, ô số 21 sẽ được 4

lạng vàng, …
3. Đối thủ chỉ được chọn mỗi lần một ô để nhận vàng. Không được phép chọn các ô bé hơn
5.
4. Bàn cờ dùng thi đấu là bàn cờ 8x8, nhưng bàn cờ để chọn vàng là NxN, các ô được đánh
số liên tục từ 1đến N.
Yêu cầu: Tìm số vàng mà đấu thủ nọ nhận được khi chọn một ô.
Dữ liệu: Vào từ file văn bản GOLD.INP gồm 1 số nguyên N là số thứ tự của ô mà đấu thủ chọn (1 ≤
N ≤10 000)
Kết quả: Ghi ra file văn bản GOLD.OUT 1 số duy nhất là số vàng đấu thủ nhận được
Ví dụ:
GOLD.INP GOLD.OUT
10 8
Hết
21
HƯỚNG DẪN
Bài 1: Phân tích số:
Cách 1:
- Viết 1 hàm kiểm tra tính nguyên tố của một số nguyên
- Dùng 2 vòng for để đếm xem có bao nhiêu cặp hai số có tổng = M
For i:=2 to m-1 do
For j:=i+1 to m do if (NT(i)) and (NT(j)) and (i+j=M) then inc(dem);
- Dùng 3 vòng for lồng nhau để đếm xem có bao nhiêu cặp 3 số NT có tổng = M
Nhận xét làm cách này sẽ chạy mất nhiều thời gian nếu M lớn
Cách 2:
- Dùng mảng 1 chiều để lưu các số nguyên tố từ 1 đến M (có K số nguyên tố)
(Có thể dùng lệnh đếm từng số hoặc dùng sàng để lấy ra các số nguyên tố)
- Dùng 2 vòng for để đếm ra kết quả:
Dem:=0;
For i:=1 to K div 2 do
Begin

IF NT(M-i) and (a[i] < M-i) then inc(dem);
For j:=i+1 to K-1 do
If NT(S-i-j) and (a[j]<s-i-j) then inc(dem);
End;
Bài 2. Camera theo dõi
Program Dat_may_theo_doi;
Const
fi = 'camera.inp';
fo = 'camera.out';
maxn = 100;
Type
arrd = array[1 maxn] of real;
Var
d, kq : arrd;
x, n, k : integer;
r : real;
f : text;
Procedure Nhap;
Var
i : integer;
Begin
Assign(f, fi); reset(f);
readln(f, n, r);
for i:= 1 to n do readln(f, d[i]);
close(f);
End;
Procedure Sort;
Var
i, j : integer;
tg : real;

Begin
for i:= 1 to n-1 do
for j:= i+1 to n do
if d[i] > d[j] then
begin
22
tg:= d[i];
d[i]:= d[j];
d[j]:= tg;
end;
End;
Procedure Xuli;
Var
i, j : integer;
ok : boolean;
kl : real;
Begin
k:= 1;
kq[1]:= d[1] + r;
kl:= d[1] + r;
i:= 1;
writeln;
while i < n do
begin
while (d[i] <= r + kl) and (i<n) do inc(i);
kl:= d[i] + r;
inc(k); kq[k]:= kl;
kl:=kl+r;
writeln(d[i]:4:1);;
end;

End;
Procedure xuli1;
Var i, j : integer;
kc:real;
Begin
k:=1;
kq[1] := d[1]+r;
i:=1;
while i < n do
Begin
while (d[i] <=r+kq[k]) and (i<n) do inc(i);
if i<n then
begin inc(k);
kq[k] := d[i]+r; end
else
Begin
if d[i] > kq[k]+r then
begin
inc(k);
kq[k] :=d[i]
end;
end;
End;
End;
Procedure Inkq;
Var
23
i : integer;
Begin
Assign(f, fo); rewrite(f);

writeln;
writeln(f, k);
for i:= 1 to k do writeln(f, kq[i]:0:1);
close(f);
End;
BEGIN
Nhap;
Sort;
for x := 1 to n do write(d[x]:5:1);
Xuli1;
Inkq;
END.
Bài 3. Tìm vàng
const fi='gold.inp';
fo='gold.out';
Var n:integer;
i:integer;
so,soi:longint;
f:text;
Begin
assign(f,fi);
reset(f);
read(f,n);
close(f);
so:=1;
for i:=1 to n do
begin
soi := i;
while soi mod 10 =0 do soi := soi div 10 ;
soi := soi mod 100000;

so:= so*soi;
while so mod 10 = 0 do so := so div 10;
so := so mod 100000;
end;
so := so mod 10;
assign(f,fo);
rewrite(f);
write(f,so);
close(f);
End.
24
SỞ GD&ĐT HÀ NỘI
Trường THPT Chu Văn An
Đề thi đề nghị
OLYMPIC KHU VỰC DUYÊN HẢI BẮC BỘ
Năm học: 2013 – 2014
MÔN TIN HỌC LỚP 10
Thời gian làm bài 180 phút
(Đề gồm có 03 bài trong 03 trang)
25

×