Tải bản đầy đủ (.pdf) (21 trang)

Bộ đề thi năng khiếu tin học lớp 10 trường chuyên năm 2022

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 (2.59 MB, 21 trang )

ĐỀ KIỂM TRA NĂNG KHIẾU TIN HỌC

VOI Training Camp

Lớp 10 Tin
Ngày 06 tháng 12 năm 2020
Thời gian 180 phút
(Đề thi có 3 trang)
Tổng quan về các bài thi trong đề
TT
1
2
3
4
5

Tên bài
Số đư
Trừ hoặc chia
Nguyên tố cùng nhau
Di chuyển
Tổng chữ số

File
Chương trình
REMANDER.*
SUBORDIV.*
COPRIME.*
MOVE.*
SUMDG.*


File
dữ liệu
REMANDER.INP
SUBORDIV.INP
COPRIME.INP
MOVE.INP
SUDG.INP

File
kết quả
REMANDER.OUT
SUBORDIV.OUT
COPRIME.OUT
MOE.OUT
SUMDG.OUT

Điểm
2,0
2,0
2,0
2,0
2,0

Phần mở rộng của File chương trình là PAS hoặc CPP tùy theo ngơn ngữ lập trình sử dụng là
Pascal hoặc C++

Cấu hình dịch:
G++ 4.9.2: -std=c++11 -O2 -s -static -Wl,--stack,66060288 -lm -x c++
FPC 3.0.4: -O2 -XS -Sg -Cs66060288


Viết chương trình giải các bài tốn sau:

Bài 1. Số dư
Cho hai số nguyên 𝑥, 𝑃 (𝑃 > 1). Ta đã biết rằng ln tồn tại duy nhất cách phân tích:
𝑥 =𝑘×𝑃+𝑟
trong đó 𝑘 ∈ ℤ , 𝑟 ∈ {0,1,2, … 𝑃 − 1} . Số 𝑘 được gọi là thương của 𝑥 chia cho P, còn 𝑟 là phần dư
của 𝑥 chia cho P.
Yêu cầu: Cho trước dãy số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 và hai số nguyên dương 𝑃, 𝑟 . Hãy đếm xem
trong dãy đã cho có bao nhiêu số nguyên mà phần dư của nó khi chia cho 𝑃 bằng 𝑟?
Dữ liệu: Vào từ file văn bản REMAINDER.INP
• Dịng đầu tiên chứa ba số nguyên dương 𝑛, 𝑃, 𝑟 (𝑛 ≤ 106 , 0 ≤ 𝑟 < 𝑃 ≤ 100)
• Dịng thứ hai chứa 𝑛 số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 (|𝑎𝑖 | ≤ 109 )
Kết quả: Ghi ra file văn bản REMAINDER.OUT một số nguyên duy nhất là số lượng các phần tử
trong mảng có phần dư khi chia cho 𝑃 bằng 𝑟 ?
Ví dụ:
REMAINDER.INP
5 2 1
1 2 3 4 5

REMAINDER.OUT
3

Bài 2. Trừ hoặc chia
Cho một số nguyên dương 𝑛. Tại mỗi bước bạn có thể biến đổi 𝑛 theo một trong hai cách:
• Chia số 𝑛 cho một ước dương thực sự của nó (Ước dương thực sự của 𝑛 là một số nguyên
dương 𝑑 < 𝑛 sao cho 𝑛 chia hết cho 𝑑)
• Trừ 𝑛 đi một đơn vị
Yêu cầu: Hãy xác định số bước biến đổi ít nhất để có thể biến đổi 𝑛 thành số 1
Dữ liệu: Vào từ file văn bản SUBORDIV.INP
• Dịng 1: Chứa số nguyên dương 𝑇 (1 ≤ 𝑇 ≤ 100) là số bộ dữ liệu.

• Dịng 2...𝑇 + 1: Mỗi dịng chứa một số nguyên dương 𝑛 (1 ≤ 𝑛 ≤ 109 )
Kết quả: Ghi ra file văn bản SUBORDIV.OUT
Gồm 𝑇 dòng, dòng thứ 𝑖 chứa một số nguyên là số phép biến đổi ít nhất cần thực hiện để đưa số
nguyên dương 𝑛 trong dòng 𝑖 + 1 của file dữ liệu trở thành số 1 (𝑖 = 1,2, … , 𝑇)
Trang: 1


Ví dụ:
SUBORDIV.INP
6
1
2
3
4
6
9

SUBORDIV.OUT
0
1
2
2
2
3

Giải thích:
1
2→1
3→2→1
4→2→1

6→2→1
9→3→2→1

Bài 3. Nguyên tố cùng nhau
Cho ba số nguyên tố 𝑝, 𝑞, 𝑟 và hai số nguyên dương 𝐴, 𝐵. Hãy đếm xem có bao nhiêu số nguyên
𝑥 thỏa mãn hai điều kiện dưới đây:
1. 𝐴 ≤ 𝑥 ≤ 𝐵
2. gcd(𝑥, 𝑦) = 1 (ở đây gcd(𝑥, 𝑦) là hàm tìm ước chung lớn nhất của hai số nguyên dương
𝑥, 𝑦) với mọi số nguyên dương 𝑦 mà phân tích của nó thành tích các thừa số ngun tố
có dạng 𝑦 = 𝑝𝑢 × 𝑞 𝑣 × 𝑟 𝑤 (ở đây 𝑢, 𝑣, 𝑤 là các số nguyên khơng âm)
Dữ liệu: Vào từ file văn bản COPRIME.INP
• Dịng thứ nhất chứa ba số nguyên tố 𝑝, 𝑞, 𝑟 (1 < 𝑝 < 𝑞 < 𝑟 < 106 )
• Dòng thứ hai chứa hai số nguyên dương A, B (1 ≤ 𝐴 ≤ 𝐵 ≤ 1018 )
Kết quả: Ghi ra file văn bản COPRIME.OUT một số nguyên duy nhất là số lượng số tìm được
Ràng buộc: Có 50% số test ứng với 1 điểm của bài có 1 ≤ 𝐴 ≤ 𝐵 ≤ 106
Ví dụ:
COPRIME.INP
2 3 5
10 20

COPRIME.OUT
4

Bài 4. Di chuyển
Xét việc di chuyển từ điểm nguyên này tới điểm nguyên khác trên đường thẳng theo quy tắc
sau:
• Bắt đầu từ một điểm có toạ độ ngun,
• Từ điểm hiện tại tới điểm mới với bước đi không âm, độ dài bằng bước đi trước hoặc
khác 1 đơn vị.
Yêu cầu: Cho 2 số nguyên x và y (0 ≤ x ≤ y ≤ 231). Hãy xác định số bước tối thiểu đi từ x tới y với

với bước đi ban đầu và bước đi cuối cùng đều có độ dài 1.

45

46

47

48

49

50

Ví dụ, với x = 45, y = 50, số bước chuyển tối thiểu là 4:
45  46  48  49  50
Dữ liệu: Vào từ file văn bản MOVE.INP
Trang: 2


Gồm nhiều dịng, mỗi dịng mơ tả một bộ dữ liệu cứa hai số nguyên 𝑥, 𝑦 cách nhau bởi dấu cách.
Kết quả: Ghi ra file văn bản MOVE.OUT
Mỗi dòng ghi một số nguyên là kết quả của bộ dữ liệu tương ứng trong dữ liệu vào.
Ví dụ:
MOVE.INP
45 50

MOVE.OUT
4


Bài 5. Tổng chữ số
Cho số nguyên dương 𝑥. Hàm 𝑓(𝑥) được xây dựng bằng cách như sau: Trước tiên lấy tổng các chữ
số của 𝑥 được số nguyên 𝑥1 ; nếu 𝑥1 > 9 thì lấy tổng các chữ số của 𝑥1 được số nguyên 𝑥2 ;... Quá
trình này tiếp tục đến khi thu được một số nhỏ hơn hoặc bằng 9. Ví dụ nếu 𝑥 = 197 thì 𝑥1 = 1 + 9 +
7 = 17; 𝑥2 = 1 + 7 = 8 và ta được 𝑓 (𝑥 ) = 8.
Yêu cầu: Cho hai số nguyên dương 𝐿, 𝑅 hãy tính tổng 𝑓 (𝐿) + 𝑓(𝐿 + 1) + ⋯ + 𝑓(𝑅)
Dữ liệu: Vào từ file văn bản SUMDG.INP
• Dịng đầu tiên chứa số nguyên dương 𝑄 (𝑄 ≤ 100) là số lượng truy vấn
• 𝑄 dịng tiếp theo, dịng thứ 𝑖 chứa hai số nguyên dương 𝐿𝑖 , 𝑅𝑖 (1 ≤ 𝐿𝑖 ≤ 𝑅𝑖 ≤ 260 ) thể hiện
một truy vấn.
Kết quả: Ghi ra file văn bản SUMDG.OUT gồm 𝑄 dòng, dòng thứ 𝑖 in ra một số nguyên là tổng
𝑓 (𝐿𝑖 ) + ⋯ + 𝑓(𝑅𝑖 ) (câu trả lời cho truy vấn thứ 𝑖)
Subtasks:
• Subtask 1: 1 ≤ 𝐿𝑖 ≤ 𝑅𝑖 ≤ 9
[0,5 điểm]
• Subtask 2: 𝑅𝑖 − 𝐿𝑖 ≤ 1000
[0,5 điểm]
• Subtask 3: Khơng có ràng buộc bổ sung
[1,0 điểm]
Ví dụ:
SUMDG.INP
2
9 13
44 45

SUMDG.OUT
19
17

---HẾT--Thí sinh khơng được hỏi linh tinh. Giảm thị khơng giải thích lằng nhằng!


Trang: 3


VOI Training Camp

ĐỀ KIỂM TRA NĂNG KHIẾU LẦN 2 TIN HỌC
Lớp 10 Chuyên Tin
Ngày 09 tháng 11 năm 2020
Thời gian 180 phút
(Đề thi có 3 trang)

Tổng quan về các bài thi trong đề
TT
1
2
3
4
5

Tên file
chương trình

Tên bài

Tên file
dữ liệu

Tên file
kết quả


Hình chữ nhật
Giải mã
Tổng các số trong hình chữ nhật

rectangle.cpp

rectangle.inp

rectangle.out

xeda.cpp

xeda.inp

xeda.out

smax.cpp

smax.inp

smax.out

Cái mũi của Pinochio
Dãy con dài nhất tổng khơng q

pinochio.cpp

pinochio.inp


pinochio.out

seqmaxm.cpp

seqmaxm.inp

seqmaxm.out

Time

Điểm

1s
1s
1s
1s
1s

2
2
2
2
2

Viết chương trình giải các bài tốn sau:

Bài 1. Hình chữ nhật
Trang rất thích các số tự nhiên vì nó đơn giản, khơng lằng nhằng về dấu. Trong giờ ra chơi,
Trang vẽ một hình chữ nhật kích thước m x n, sau đó chia hình chữ nhật thành m.n ơ vng. Mỗi
ơ vng được điền vào các số theo quy luật mà Trang yêu cầu. Nhiệm vụ còn lại là Bạn điền số

vào các ơ vng đó sao cho nhanh nhất và đúng quy luật mà Trang đưa ra thì Bạn sẽ chiến thắng.
Hãy nhờ máy tính điền giúp cho nhanh.
File Input: rectangle.inp chỉ có một dịng duy nhất chứa 2 giá trị m, n. (0File Output: rectangle.out là các số có giá trị điền như quy luật mà Trang yêu cầu, mỗi giá
trị cách nhau một kí tự trống.
Ví dụ:
rectangle.inp
45

rectangle.out
16 17 18 19 20
15 14 13 12 11
6 7 8 9 10
54321

Bài 2. Giải mã
Để giữ bí mật người ta phải mã hóa các thơng tin trước khi chuyền đi hoặc lưu trữ. Một
trong những cách mã hóa sớm nhất được sử dụng rộng rãi thời kì cổ đại là cách mã hóa xeda. Mỗi
chữ cái được thay bằng chữ cái đứng sau nó k vị trí trong bảng chữ cái. Việc tìm kiếm thay thế
được tiến hành vịng trịn theo bảng chữ cái .Nếu bảng chữ cái có n chữ thì sau chữ cái n là chữ
cái thứ nhất,… Các kí tự ngồi bảng chữ cái vẫn được giữ ngun. Ví dụ Nếu k=2 thì có nghĩa
thay a bằng c, b bằng d, z bằng b. Nếu xâu “Tin hoc” thì mã là “Vkp jqe”. Vấn đề đặt ra là khi
nhận được thơng tin đã mã hóa, dựa vào quy tắc mã hóa, em hãy giải mã giúp.
Trang 1/3


File Input: xeda.inp chứa dòng đầu tiên là giá trị của số nguyên dương k (0là xâu cần giải mã, Độ dài của xâu không vượt quá 500 kí tự
File Output: xeda.out là xâu đã giải được mã.
Ví dụ:

xeda.inp
2
Vkp jqe

xeda.out
Tin hoc

Bài 3. Tổng các số trong hình chữ nhật
Cho mảng hai chiều hàng và cột chứa các số nguyên. Hãy tìm hình chữ nhật của mảng đã cho
có tổng các số là lớn nhất.
File Input:smax.inp
 Dịng đầu ghi hai số nguyên dương

dòng tiếp theo, dòng thứ ghi số của hàng thứ (Trị tuyệt đối không vượt quá 106)
File Output: smax.out
 Dòng đầu ghi - tổng lớn nhất tìm được
 Dịng thứ hai ghi 4 số ngun
với
là ơ trên-trái và
là ô dướiphải.
Example:
smax.inp

smax.out

3
0
1
0


7
2 3 3 4

4
1 -2 0
-4 3 1
3 -1 4

Bài 4. Cái mũi của Pinochio
Pinochio lại bị gãy mũi. Bác Giô-giép quyết định làm chiếc mũi mới
cho cậu. Đầu tiên bác chon ra thanh gỗ với độ dài mỗi thanh là
. Sau đó bác sẽ chọn ra thanh để làm chiếc mũi mới cho
Pinochio như sau:
 Nếu có hai thanh độ dài bằng nhau, bác sẽ bỏ đi một thanh.
 Nếu hai thanh có độ dài khác nhau, bác sẽ chặt bỏ đi khỏi thanh
có độ dài lớn hơn một đoạn dài đúng bằng thanh còn lại.
Tất nhiên cuối cùng chỉ còn lại một thanh gỗ và nó được dùng làm mũi cho Pinochio.
Bạn hãy tính độ dài chiếc mũi mới của Pinochio?
File Input: Pinochio.inp
 Dòng đầu tiên ghi số nguyên dương
- số thanh gỗ
 Dòng thứ hai ghi số nguyên dương là độ dài ban đầu của các thanh gỗ. Các giá trị này
không vượt quá 109.
Trang 2/3


Output: Pinochio.out
Một số nguyên duy nhất là độ dài chiếc mũi mới của Pinochio
Example:
pinochio.inp

4
12 24 24 18

pinochio.out
6

Bài 5. Dãy con dài nhất tổng không quá m
Cho dãy số nguyên dương
. Hãy tìm dãy con
của dãy
trên có tổng khơng vượt q và có nhiều phần tử nhất.
File Input:seqmaxm.inp
 Dịng đầu tiên ghi hai số nguyên dương
 Dòng thứ hai ghi số nguyên dương
File Output: seqmaxm.out : Ghi một số nguyên duy nhất là số lượng phần tử của dãy dài nhất tìm
được
Example:
seqmaxm.inp
5 6
1 2 1 1 3
Subtasks:
 Subtask 1:
 Subtask 2:
 Subtask 3:

seqmaxm.out
4

[40%]
[40%]

[20%]

Trang 3/3


ĐỀ KIỂM TRA NĂNG KHIẾU TIN HỌC

VOI Training Camp

Lớp 10 TIN
Ngày 19 tháng 4 năm 2021
Thời gian 180 phút
(Đề thi có 3 trang)
Tổng quan về các bài thi trong đề
TT
1
2
3

File
Chương trình
ROSE.*
COMFOR.*
BUS.*

Tên bài
Chụp ảnh
Thoải mái
Đón nhân viên


File
dữ liệu
ROSE.INP
COMFOR.INP
BUS.INP

File
kết quả
ROSE.OUT
COMFOR.OUT
BUS.OUT

Điểm
6.0
7.0
7.0

Phần mở rộng của File chương trình là PAS hoặc CPP tùy theo ngơn ngữ lập trình sử dụng là
Pascal hoặc C++

Cấu hình dịch:
G++ 4.9.2: -std=c++11 -O2 -s -static -Wl,--stack,66060288 -lm -x c++
FPC 3.0.4: -O2 -XS -Sg -Cs66060288

Viết chương trình giải các bài tốn sau:

Bài 1. Chụp ảnh
Phía trước hai dãy nhà B, C Đoàn trường đã trồng một dãy 𝑛 chậu hoa hồng. Các chậu hoa đánh
số 1, 2, ...., 𝑛 từ trái qua phải. Thật tình cờ, vào ngày 26/3, tất cả các chậu hoa đều nở những bông
hoa hồng đẹp mắt, chậu hoa thứ 𝑖 có 𝑎𝑖 bơng hoa hồng.

Mới theo học một lớp nhiếp ảnh, Mai quyết định chụp một vài bức ảnh về những bông hoa hồng
này. Với mỗi cặp số (𝑖, 𝑗) thỏa mãn 1 ≤ 𝑖 ≤ 𝑗 ≤ 𝑛, Mai sẽ chụp một bức ảnh chứa tất cả các chậu
hoa 𝑖, 𝑖 + 1, … , 𝑗.
Sau khi xem lại những bức ảnh của mình, Mai nhận thấy rằng một số bức ảnh tồn tại "chậu hoa
trung bình" đó là chậu hoa có 𝑃 bơng hoa với 𝑃 là số lượng hoa trung bình của các chậu hoa
trong bức ảnh.
Yêu cầu: Hãy đếm xem có bao nhiêu bức ảnh của Mai có "chậu hoa trung bình".
Dữ liệu: Vào từ file văn bản ROSE.INP
• Dịng đầu tiên chứa số nguyên dương 𝑛 (1 ≤ 𝑛 ≤ 1000)
• Dịng thứ hai chứa 𝑛 số ngun dương 𝑎1 , 𝑎2 , … , 𝑎𝑛 cách nhau bởi ít nhất một dấu cách
(1 ≤ 𝑎𝑖 ≤ 1000 ∀ 𝑖 = 1 ÷ 𝑛)
Kết quả: Ghi ra file văn bản ROSE.OUT một số nguyên duy nhất là số lượng bức ảnh có "chậu
hoa trung bình"
Ràng buộc:
• Subtask 1: 𝑛 ≤ 100
• Subtask 2: Khơng có ràng buộc bổ sung

[60%]
[30%]

Ví dụ:
ROSE.INP
4
1 1 2 3

ROSE.OUT
6

Trang: 1



Bài 2. Thoải mái
Sân trường Chuyên Nguyễn Trãi rất rộng, được chia thành lưới ô vuông với các hàng đánh số 0,
1, 2, ..., 1000 từ nam tới bắc và các cột đánh số 0, 1,2, ...,1000 từ tây sang đơng. Ơ nằm ở giao của
hàng 𝑖, cột 𝑗 ký hiệu là ô (𝑖, 𝑗).
Trong giờ học quân sự, thầy giáo lần lượt yêu cầu 𝑛 bạn đứng vào trong sân theo thứ tự 1, 2, ...,
𝑛. Bạn thứ 𝑖 được yêu cầu đứng vào ô (𝑟𝑖 , 𝑐𝑖 ). Tất cả các ô là phân biệt.
Một bạn được cho là có cảm giác "thoải mái" nếu như trong bốn ô kề cạnh ô bạn đó đang đứng
có đúng ba ô có bạn đứng.
Yêu cầu: Lần lượt với 𝑖 = 1,2, … , 𝑛 hãy đếm số lượng bạn cảm thấy "thoải mái" trên sân sau khi
bạn thứ 𝑖 đứng vào trong sân.
Dữ liệu: Vào từ file văn bản COMFOR.INP
• Dòng đầu tiên chứa số nguyên dương 𝑛 (1 ≤ 𝑛 ≤ 105 )
• 𝑛 dịng tiếp theo, dịng thứ 𝑖 chứa hai số nguyên 𝑟𝑖 , 𝑐𝑖 cách nhau bởi dấu cách mơ tả vị trí
(𝑟𝑖 , 𝑐𝑖 ) là vị trí mà bạn thứ 𝑖 đứng.
Kết quả: Ghi ra file văn bản COMFOR.OUT gồm 𝑛 dòng, dòng thứ 𝑖 ghi một số nguyên là số lượng
bạn cảm thấy "thoải mái" sau khi bạn thứ 𝑖 đứng vào sân ( = 1 ữ )
Rng buc:
ã Subtask 1: 400
• Subtask 2: Khơng có ràng buộc bổ sung

[30%]
[70%]

Ví dụ:
COMFOR.INP
8
0 1
1 0
1 1

1 2
2 1
2 2
3 1
3 2

COMFOR.OUT
0
0
0
1
0
0
1
2

Bài 2. Đón nhân viên [BUS]
Trong khu đô thị mới của thành phố chỉ có hai loại đường ngang và dọc. Để đơn giản ta có thể mơ
tả hệ thống giao thơng này trên mặt phẳng hai chiều, các đường ngang theo hướng Tây - Đông được
đánh số 1, 2, ...., 𝑚 từ trên xuống dưới, các đường dọc theo hướng Bắc - Nam được đánh số 1, 2, ...,
𝑛 từ trái sang phải (chú ý là các con đường này đều đi lại được theo hai hướng). Giao điểm của các
đường ngang và dọc là các ngã rẽ. Ngã rẽ ký hiệu (𝑖, 𝑗) là giao của đường ngang 𝑖 và đường dọc 𝑗
(𝑖 = 1,2 … , 𝑚; 𝑗 = 1,2, … , 𝑛)
Cơng ty tin học ABC có trụ sở đặt tại (𝑚, 𝑛) (giao của đường ngang 𝑚 và đường dọc 𝑛). Hàng ngày
cơng ty có một số ơ tô chở nhân viên đi làm. Tất cả các ô tơ này đều xuất phát từ vị trí (1,1), đi theo
các tuyến đường ngang và dọc đến (𝑚, 𝑛). Từ ngã rẽ (𝒊, 𝒋) ô tô chỉ di chuyển đến hoặc ngã rẽ (𝒊 +
𝟏, 𝒋), hoặc ngã rẽ (𝒊, 𝒋 + 𝟏). Có 𝐾 ngã rẽ, đánh số 1, 2, ..., 𝐾 là điểm dừng đón nhân viên của các ơ
tơ. Hàng ngày tại ngã rẽ thứ 𝑖 có 𝑎𝑖 nhân viên của cơng ty đứng đón ơ tơ đi làm.

Trang: 2



Yêu cầu: Tính số lượng nhiều nhất các nhân viên của công ty mà ô tô đầu tiên trong ngày có thể đón
với giả thiết số chỗ ngồi trên xe đủ để đón tất cả các nhân viên cơng ty trong một lượt chạy.
Dữ liệu: Vào từ file văn bản BUS.INP
• Dịng đầu tiên chứa ba số ngun dương 𝑚, 𝑛, 𝐾 (1 ≤ 𝑚, 𝑛 ≤ 109 ; 1 ≤ 𝐾 ≤ 105 )
• 𝐾 dịng tiếp theo, dịng thứ 𝑖 chứa ba số nguyên dương 𝑢𝑖 , 𝑣𝑖 , 𝑎𝑖 (1 ≤ 𝑢𝑖 ≤ 𝑚; 1 ≤ 𝑣𝑖 ≤ 𝑛)
thể hiện (𝑢𝑖 , 𝑣𝑖 ) là vị trí ngã rẽ đón khách thứ 𝑖 cịn 𝑎𝑖 là số lượng nhân viên công ty đứng
đợi ở ngã rẽ này (0 ≤ 𝑎𝑖 ≤ 104 )
Các số nguyên liên tiếp trên cùng một dịng cách nhau ít nhất một khoảng trống
Kết quả: Ghi ra file văn bản BUS.OUT một số nguyên duy nhất là số lượng nhân viên lớn nhất có
thể lên ơ tơ trong chuyến đầu tiên
Ràng buộc:
• Subtask 1: 𝑚, 𝑛 ≤ 1000
• Subtask 2: 𝑚, 𝑛 ≤ 105 , 𝐾 ≤ 5000
• Subtask 3: 𝑚, 𝑛 ≤ 105 ; 𝐾 > 50000
• Subtask 4: Khơng có ràng buộc bổ sung

[50%]
[25%]
[15%]
[10%]

Ví dụ:
BUS.INP
3 4 2
2 2 7
1 3 5

BUS.OUT

7

---HẾT--Thí sinh không được hỏi linh tinh. Giảm thị không giải thích lằng nhằng!

Trang: 3


ĐỀ KIỂM TRA NĂNG KHIẾU TIN HỌC

VOI Training Camp

Lớp 10 TIN
Ngày 19 tháng 4 năm 2021
Thời gian 180 phút
(Đề thi có 3 trang)
Tổng quan về các bài thi trong đề
TT
1
2
3

File
Chương trình
ROSE.*
COMFOR.*
BUS.*

Tên bài
Chụp ảnh
Thoải mái

Đón nhân viên

File
dữ liệu
ROSE.INP
COMFOR.INP
BUS.INP

File
kết quả
ROSE.OUT
COMFOR.OUT
BUS.OUT

Điểm
6.0
7.0
7.0

Phần mở rộng của File chương trình là PAS hoặc CPP tùy theo ngơn ngữ lập trình sử dụng là
Pascal hoặc C++

Cấu hình dịch:
G++ 4.9.2: -std=c++11 -O2 -s -static -Wl,--stack,66060288 -lm -x c++
FPC 3.0.4: -O2 -XS -Sg -Cs66060288

Viết chương trình giải các bài tốn sau:

Bài 1. Chụp ảnh
Phía trước hai dãy nhà B, C Đoàn trường đã trồng một dãy 𝑛 chậu hoa hồng. Các chậu hoa đánh

số 1, 2, ...., 𝑛 từ trái qua phải. Thật tình cờ, vào ngày 26/3, tất cả các chậu hoa đều nở những bông
hoa hồng đẹp mắt, chậu hoa thứ 𝑖 có 𝑎𝑖 bơng hoa hồng.
Mới theo học một lớp nhiếp ảnh, Mai quyết định chụp một vài bức ảnh về những bông hoa hồng
này. Với mỗi cặp số (𝑖, 𝑗) thỏa mãn 1 ≤ 𝑖 ≤ 𝑗 ≤ 𝑛, Mai sẽ chụp một bức ảnh chứa tất cả các chậu
hoa 𝑖, 𝑖 + 1, … , 𝑗.
Sau khi xem lại những bức ảnh của mình, Mai nhận thấy rằng một số bức ảnh tồn tại "chậu hoa
trung bình" đó là chậu hoa có 𝑃 bơng hoa với 𝑃 là số lượng hoa trung bình của các chậu hoa
trong bức ảnh.
Yêu cầu: Hãy đếm xem có bao nhiêu bức ảnh của Mai có "chậu hoa trung bình".
Dữ liệu: Vào từ file văn bản ROSE.INP
• Dịng đầu tiên chứa số nguyên dương 𝑛 (1 ≤ 𝑛 ≤ 1000)
• Dịng thứ hai chứa 𝑛 số ngun dương 𝑎1 , 𝑎2 , … , 𝑎𝑛 cách nhau bởi ít nhất một dấu cách
(1 ≤ 𝑎𝑖 ≤ 1000 ∀ 𝑖 = 1 ÷ 𝑛)
Kết quả: Ghi ra file văn bản ROSE.OUT một số nguyên duy nhất là số lượng bức ảnh có "chậu
hoa trung bình"
Ràng buộc:
• Subtask 1: 𝑛 ≤ 100
• Subtask 2: Khơng có ràng buộc bổ sung

[60%]
[30%]

Ví dụ:
ROSE.INP
4
1 1 2 3

ROSE.OUT
6


Trang: 1


Bài 2. Thoải mái
Sân trường Chuyên Nguyễn Trãi rất rộng, được chia thành lưới ô vuông với các hàng đánh số 0,
1, 2, ..., 1000 từ nam tới bắc và các cột đánh số 0, 1,2, ...,1000 từ tây sang đơng. Ơ nằm ở giao của
hàng 𝑖, cột 𝑗 ký hiệu là ô (𝑖, 𝑗).
Trong giờ học quân sự, thầy giáo lần lượt yêu cầu 𝑛 bạn đứng vào trong sân theo thứ tự 1, 2, ...,
𝑛. Bạn thứ 𝑖 được yêu cầu đứng vào ô (𝑟𝑖 , 𝑐𝑖 ). Tất cả các ô là phân biệt.
Một bạn được cho là có cảm giác "thoải mái" nếu như trong bốn ô kề cạnh ô bạn đó đang đứng
có đúng ba ô có bạn đứng.
Yêu cầu: Lần lượt với 𝑖 = 1,2, … , 𝑛 hãy đếm số lượng bạn cảm thấy "thoải mái" trên sân sau khi
bạn thứ 𝑖 đứng vào trong sân.
Dữ liệu: Vào từ file văn bản COMFOR.INP
• Dòng đầu tiên chứa số nguyên dương 𝑛 (1 ≤ 𝑛 ≤ 105 )
• 𝑛 dịng tiếp theo, dịng thứ 𝑖 chứa hai số nguyên 𝑟𝑖 , 𝑐𝑖 cách nhau bởi dấu cách mơ tả vị trí
(𝑟𝑖 , 𝑐𝑖 ) là vị trí mà bạn thứ 𝑖 đứng.
Kết quả: Ghi ra file văn bản COMFOR.OUT gồm 𝑛 dòng, dòng thứ 𝑖 ghi một số nguyên là số lượng
bạn cảm thấy "thoải mái" sau khi bạn thứ 𝑖 đứng vào sân ( = 1 ữ )
Rng buc:
ã Subtask 1: 400
• Subtask 2: Khơng có ràng buộc bổ sung

[30%]
[70%]

Ví dụ:
COMFOR.INP
8
0 1

1 0
1 1
1 2
2 1
2 2
3 1
3 2

COMFOR.OUT
0
0
0
1
0
0
1
2

Bài 2. Đón nhân viên [BUS]
Trong khu đô thị mới của thành phố chỉ có hai loại đường ngang và dọc. Để đơn giản ta có thể mơ
tả hệ thống giao thơng này trên mặt phẳng hai chiều, các đường ngang theo hướng Tây - Đông được
đánh số 1, 2, ...., 𝑚 từ trên xuống dưới, các đường dọc theo hướng Bắc - Nam được đánh số 1, 2, ...,
𝑛 từ trái sang phải (chú ý là các con đường này đều đi lại được theo hai hướng). Giao điểm của các
đường ngang và dọc là các ngã rẽ. Ngã rẽ ký hiệu (𝑖, 𝑗) là giao của đường ngang 𝑖 và đường dọc 𝑗
(𝑖 = 1,2 … , 𝑚; 𝑗 = 1,2, … , 𝑛)
Cơng ty tin học ABC có trụ sở đặt tại (𝑚, 𝑛) (giao của đường ngang 𝑚 và đường dọc 𝑛). Hàng ngày
cơng ty có một số ơ tô chở nhân viên đi làm. Tất cả các ô tơ này đều xuất phát từ vị trí (1,1), đi theo
các tuyến đường ngang và dọc đến (𝑚, 𝑛). Từ ngã rẽ (𝒊, 𝒋) ô tô chỉ di chuyển đến hoặc ngã rẽ (𝒊 +
𝟏, 𝒋), hoặc ngã rẽ (𝒊, 𝒋 + 𝟏). Có 𝐾 ngã rẽ, đánh số 1, 2, ..., 𝐾 là điểm dừng đón nhân viên của các ơ
tơ. Hàng ngày tại ngã rẽ thứ 𝑖 có 𝑎𝑖 nhân viên của cơng ty đứng đón ơ tơ đi làm.


Trang: 2


Yêu cầu: Tính số lượng nhiều nhất các nhân viên của công ty mà ô tô đầu tiên trong ngày có thể đón
với giả thiết số chỗ ngồi trên xe đủ để đón tất cả các nhân viên cơng ty trong một lượt chạy.
Dữ liệu: Vào từ file văn bản BUS.INP
• Dịng đầu tiên chứa ba số ngun dương 𝑚, 𝑛, 𝐾 (1 ≤ 𝑚, 𝑛 ≤ 109 ; 1 ≤ 𝐾 ≤ 105 )
• 𝐾 dịng tiếp theo, dịng thứ 𝑖 chứa ba số nguyên dương 𝑢𝑖 , 𝑣𝑖 , 𝑎𝑖 (1 ≤ 𝑢𝑖 ≤ 𝑚; 1 ≤ 𝑣𝑖 ≤ 𝑛)
thể hiện (𝑢𝑖 , 𝑣𝑖 ) là vị trí ngã rẽ đón khách thứ 𝑖 cịn 𝑎𝑖 là số lượng nhân viên công ty đứng
đợi ở ngã rẽ này (0 ≤ 𝑎𝑖 ≤ 104 )
Các số nguyên liên tiếp trên cùng một dịng cách nhau ít nhất một khoảng trống
Kết quả: Ghi ra file văn bản BUS.OUT một số nguyên duy nhất là số lượng nhân viên lớn nhất có
thể lên ơ tơ trong chuyến đầu tiên
Ràng buộc:
• Subtask 1: 𝑚, 𝑛 ≤ 1000
• Subtask 2: 𝑚, 𝑛 ≤ 105 , 𝐾 ≤ 5000
• Subtask 3: 𝑚, 𝑛 ≤ 105 ; 𝐾 > 50000
• Subtask 4: Khơng có ràng buộc bổ sung

[50%]
[25%]
[15%]
[10%]

Ví dụ:
BUS.INP
3 4 2
2 2 7
1 3 5


BUS.OUT
7

---HẾT--Thí sinh không được hỏi linh tinh. Giảm thị không giải thích lằng nhằng!

Trang: 3


ĐỀ KIỂM TRA NĂNG KHIẾU LẦN 4 TIN HỌC
Lớp 10 Chuyên Tin
Ngày 25 tháng 1 năm 2021
Thời gian 180 phút
(Đề thi có 4 trang)

VOI Training

Camp

Tổng quan về các bài thi trong đề
TT Tên bài
1
2
3
4
5

Đường đi lớn nhất
Chia dãy
Dãy nhị phân

Trả lương
Cơ bé qng khăn đỏ

Tên file
chương trình

Tên file
dữ liệu

Tên file
kết quả

Time

Điểm

PMAX.CPP
DIVSEQ.CPP
DNP.CPP
MPILOT.CPP
REDHOOD.CPP

PMAX.INP
DIVSEQ.INP
DNP.INP
MPILOT.INP
REDHOOD.INP

PMAX.OUT
DIVSEQ.OUT

DNP.OUT
MPILOT.OUT
REDHOOD.OUT

1
1
1
1
1

2
2
2
2
2

Viết chương trình giải các bài tốn sau:
Bài 1. Đường đi lớn nhất (PMAX.CPP)
Ở trường mẫu giáo SuperKids, cô giáo cho các bé chơi trị chơi nhảy lị cị. Cơ vẽ trên mặt
đất một bảng hình chữ nhật gồm
hàng, cột. Các hàng của bảng đánh số 1, 2, ...,
từ trên
xuống dưới; các cột của bảng đánh số 1, 2, ..., từ trái qua phải. Ô nằm ở hàng , cột ký hiệu là
ô
.Trên mỗi ô vuông, cô hoặc vẽ một dấu gạch chéo thể hiện ơ đó khơng được đi vào hoặc
ghi một số nguyên không âm là giá trị phần thưởng sẽ nhận được nếu một bạn nhỏ nhảy vào ô
này.
Qui tắc chơi đơn giản là từ ô
bạn chỉ có thể nhảy đến ơ
nếu như các ơ

này cịn trong bảng và không bị gạch chéo. Mỗi bạn bắt đầu nhảy từ ơ (1,1) (trái-trên) và kết thúc
hành trình tại ơ
(phải-dưới)
u cầu: Viết chương trình tính giá trị lớn nhất của phần quà mà một bạn nhỏ nhận được.
Input:
 Dòng đầu tiên ghi hai số nguyên dương

dòng tiếp theo, dòng thứ ghi các số nguyên không âm thể hiện hàng thứ của bảng
(tính từ trái qua phải). Các số nguyên này không vượt quá 109, số 0 thể hiện rằng ô tương
ứng bị cấm không được nhảy vào. Tất nhiên

không phải là ô cấm.
Output: Ghi ra một số nguyên duy nhất là tổng lượng quà lớn nhất mà một bạn nhỏ nhận được.
Nếu như không tồn tại cách nhảy hợp lệ thì ghi số 0
Example:
Input

Output

34
2104
3412
3351

18

Trang 1/4


Bài 2. Chia dãy (DIVSEQ.CPP)

Cho dãy
. Hãy chia dãy trên thành nhiều đoạn nhất gồm các phần tử
liên tiếp sao cho tổng các phần tử trong mỗi đoạn đều dương.
Input:
 Dòng đầu tiên ghi số nguyên dường
| |
 Dòng thứ hai chứa số nguyên
Output: Một số nguyên duy nhất là số lượng nhiều nhất dãy con chia được. Nếu không có cách
chia thì ghi số 0
Example:
Input

Output

6
1 -2 5 -7 -9 20

3

Bài 3. Dãy nhị phân (DNP.CPP)
Dương là một học sinh thơng minh, cần cù chịu khó. Vì muốn các bạn trong cùng đội tuyển
cùng nhớ lại kiến thức về dãy nhị phân, Nam đã đưa ra một đề bài như sau: Cho trước số nguyên
dương n (n ≤ 50). Hãy đếm số lượng xâu nhị phân có độ dài n mà trong xâu đó khơng có 2 kí tự
‘1’ nào đứng cạnh nhau. Các em hãy cùng giải đề mà Nam đưa ra nhé!
Input: Chứa một số nguyên duy nhất.
Output: Chứa số nguyên duy nhất là số lượng xâu nhị phân có độ dài n mà trong xâu đó khơng có
2 kí tự ‘1’ nào đứng cạnh nhau.
Example:
Input


Output

5

13

Giải thích: 13 xâu nhị phân độ dài 5 thỏa mãn điều kiện đề bài là:
00000 00001 00010 00100 00101 01000 01001 01010 10000 10001 10010 10100 10101
Giới hạn:
Subtask 1 (60%): n ≤ 20
Subtask 2 (40%): 20 < n ≤ 50
Bài 4. Trả lương (MPILOT.CPP)
Charlie sở hữu vài cái máy bay bà già và cần tối ưu chi phi để kiếm lời. Có N phi cơng N
ch n và cần có N 2 phi hành đoàn. ỗi phi hành đoàn gồm 2 người- 1 lái chính, 1 trợ lí. ái chính
phải cao tuổi hơn trợ l . ợp đồng cho mỗi phi công có ghi mức lương nếu anh ta là lái chính
hoặc là trợ lí. ới mỗi 1 hợp đồng thì lương lái chính lương trợ lí.
ìm cách ghép cặp sao cho tổng lương phải trả cho N người là ít nhất.
Input: MPILOT.INP gồm có
Dịng đầu là N N ch n , số phi cơng, 2 ≤ N ≤ 10,000.
N dịng tiếp theo, mỗi dòng là 2 số , là lương phi cơng thứ i nếu làm lái chính hoặc trợ
lí,1 ≤
≤ 100,000.
Trang 2/4


Các phi công sắp tăng dần theo tuổi.
Output: MPILOT.OUT: ương nhỏ nhất cần trả
Example:
MPILOT.INP


MPILOT.OUT

4
5000 3000
6000 2000
8000 1000
9000 6000

19000

i cũng biết chuyện cổ tích Cơ bé qng khăn đỏ. Cơ bé
đi qua rừng tới thăm bà, dọc đường cơ gặp chó sói và biết
bao chuyện rắc rối đã xảy ra. May nhờ có bác thợ săn
Nhà của dũng cảm đã giải cứu cho cả hai bà cháu. Vấn đề là cô bé
bà cô bé
thiếu thông tin. Nếu cô biết được ở đâu có sói thì cơ đã
chọn đường đi an tồn, khơng gặp con sói nào và sẽ
khơng có chuyện phiền phức nào xảy ra, bác thợ săn cũng
không phải vất vả. ãy xét trường hợp khi cô bé biết rõ vị
trí của các con sói.
Giả thiết cánh rừng là một hình chữ nhật kích thước wh,
có 2 cạnh trùng với 2 trục toạ độ 1 ≤ w, h ≤ 100 . Nhà cơ
bé ở điểm có toạ độ (0, 0), cịn nhà bà ở điểm có toạ độ
Nhà cơ bé
(w, h). Các đường mòn trong rừng song song với các trục
toạ độ và chia khu rừng thành các ô vuông đơn vị có toạ độ đỉnh ngun. Cơ bé ln luôn
đi tới nhà bà theo con đường ngắn nhất: chỉ đi sang phải và lên trên, dọc theo các đường
mòn. Các con sói chỉ rình ở các điểm có toạ độ ngun (ở giao của các đường mịn). Trong
rừng có n sói 0 ≤ n ≤ 100 , sói thứ i ở toạ độ (xi, yi), 0 ≤ xi ≤ w, 0 ≤ yi ≤ h. Sói khơng có ở
trong nhà cô bé hay nhà của bà cô bé.

Yêu cầu: Cho biết w, h, n và các toạ độ xi, yi, i = 1  n. ãy xác định số đường đi an tồn
cơ bé qng khăn đỏ có thể thực hiện.
Input: gồm nhiều bộ dữ liệu, mỗi bộ dữ liệu xác định trên một nhóm dịng:
 Dịng đầu tiên trong nhóm chứa 2 số ngun w h,
 Dịng thứ 2 chứa số nguyên n, dòng thứ i trong n dòng tiếp theo chứa 2 số nguyên xi
yi .
Dữ liệu kết thúc bằng dòng chứa 2 số 0 cách nhau bởi dấu cách.
Output: Kết quả của mỗi test trong file dữ liệu vào được đưa ra trên một dòng (theo thứ tự)
là số lượng đường đi tìm được. Con số này có thể rất lớn nên bạn chỉ cần in phần dư của nó
khi chia cho 109+7
Example:
Đường đi của
cơ bé

Vị trí của sói

Bài 5. Cơ bé qng khăn đỏ (REDHOOD.CPP)

Trang 3/4


Input

Output

11
0
11
2
01

10
44
3
01
11
31
10 10
0
10 10
3
01
11
10
33
5
10
11
12
22
32
00

2
0
7
184756
0
1

Thí sinh làm bài nghiêm túc


Trang 4/4


VOI Training Camp

ĐỀ KIỂM TRA NĂNG KHIẾU TIN HỌC
Lớp 10 Chuyên Tin
Ngày 05 tháng 10 năm 2020
Thời gian 180 phút
(Đề thi có 2 trang)

Viết chương trình giải các bài tốn sau:

Bài 1: Đo độ sâu (2 điểm - Tên file chương trình: B1.cpp)
Trong đầm sen có cây sen nổi lên khỏi mặt nước với độ cao tính từ mặt nước đến cuống bông
sen là ℎ. Để đo chiều sâu của đầm, người ta kéo cây sen một đoạn sao cho cuống của bông sen
sau khi kéo nằm sát mặt nước. Khoảng cách trên mặt nước từ chỗ cây sen nổi lên mặt nước đến
vị trí mới của cuống sen là 𝑎. Giả thiết rằng thân của cây sen mọc thẳng đứng và sau khi kéo thân
của nó vẫn thẳng.
Yêu cầu: Biết giá trị ℎ và 𝑎 hay tính độ sâu của đầm sen. Ở đây độ sâu của đầm là khoảng cách
từ vị trí đáy đầm nơi cây sen mọc lên đến mặt nước theo chiều thẳng đứng.
Dữ liệu: Nhập từ bàn phím hai giá trị thực lần lượt là ℎ và 𝑎 (0 < ℎ < 𝑎)
Kết quả: In ra một số thực với 2 chữ số phần thập phân - độ sâu của đầm.
Ví dụ:
Input
1 10

output
49.50


Bài 2. Chạy bền (2 điểm - Tên file chương trình: B2.cpp)
Sân trường Nguyễn Trãi có dạng hình vng, mỗi chiều 𝑎 mét. Để đơn giản, có thể mơ ta sân
như một hình vuông trên mặt phẳng tọa độ với tọa độ bốn góc lần lượt theo chiều kim đồng hồ
là (0,0), (0, 𝑎), (𝑎, 𝑎), (𝑎, 0). Giờ thể dục, thầy giáo yêu cầu cả lớp chạy bền 𝑛 mét quanh sân
trường theo chiều kim đồng hồ với điểm xuất phát là (0,0), thầy sẽ đứng ở vị trí kết thúc để bấm
thời gian.
Yêu cầu: In ra tọa độ vị trí thầy giáo đứng
Dữ liệu: Nhập từ bàn phím lần lượt hai số nguyên dương 𝑎 và 𝑛 (1 ≤ 𝑎, 𝑛 ≤ 109 )
Kết quả: In ra hai số nguyên 𝑥, 𝑦 cách nhau một dấu trống thể hiện vị trí đứng của thầy giáo có
hồnh độ 𝑥 và tung độ 𝑦.
Ví dụ:
Input
100 475

Output
0 75

Bài 3. Trao thưởng (2 điểm - Tên file chương trình: B3.cpp)
Sau mỗi lần thi năng khiếu, nhà trường trao thưởng cho các học sinh đạt điểm cao nhất trong
kỳ thi. Nếu có nhiều bạn cùng đạt điểm cao nhất thì tất cả các bạn nàyđều được trao thưởng, giá
trị tiền thưởng của mỗi bạn là 𝑥.
Yêu cầu: Biết điểm thi năng khiếu của 𝑛 bạn lớp 10 Tin. Hỏi rằng tổng tiền thưởng mà nhà trường
trao thưởng cho các bạn có điểm cao nhất trong lớp là bao nhiêu?
Dữ liệu: Nhập lần lượt từ bàn phím các giá trị sau:
• Số nguyên dương 𝑛 ≤ 106 - số lượng học sinh tham gia thi
• Số nguyên dương 𝑥 ≤ 103 - tiền thưởng mà mỗi bạn có điểm cao nhất được nhận
• Tiếp đến là 𝑛 số ngun dương có giá trị khơng vượt q 109 là điểm của 𝑛 bạn tham
gia kỳ thi.
Kết quả: Ghi ra màn hình một số nguyên duy nhất - tổng số tiền thưởng các bạn lớp 10 tin nhận

được.
Trang: 1


Yêu cầu kỹ thuật: Để có thể đạt được 100% số điểm của bài chương trình của bạn khơng được
sử dụng quá 20 biến đơn (biến thuộc các kiểu char, int, long long, double, float) . Nếu bạn phải
sử dụng số biến đơn nhiều hơn, điểm tối đa bạn đạt được chỉ là 50% số điểm của bài.
Ví dụ:
Input
5
1
3
5
3
5
3

Output
2

Bài 4. Lị vi sóng (2 điểm - Tên file chương trình: B4.cpp)
Trong bếp của một nhà hàng lớn có một lị vi sóng hâm nóng thức ăn phục vụ khách hàng. Lị
vi sóng này chỉ có một nút điều khiển. Mỗi lần bấm nút trong 5 lần bấm đầu tiên sẽ kéo dài hoạt
động của lị vi sóng thêm 30 giây, mỗi lần bấm nút trong 5 lần bấm tiếp theo sẽ kéo dài hoạt
động của lị vi sóng thêm 60 giây, mỗi lần bấm nút trong 5 lần tiếp theo nữa sẽ kéo dài hoạt động
của lò thêm 90 giây,.... tức là sau 5 lần bấm liên tiếp thời gian hoạt động của lò sẽ tăng thêm 30
giây cho mỗi lần bấm trong 5 lần tiếp theo. Số lần bấm nút được hiển thị trên màn hình điều
khiển.
Cho số lần bấm nút 𝑘. Hãy xác định thời gian hoạt động của lị (tính bằng giây).
Dữ liệu: Nhập từ bàn phím một số nguyên dương 𝑘 (1 ≤ 𝑘 ≤ 109 )

Kết quả: Ghi ra một số nguyên duy nhất là thời gian hoạt động của lị
Ví dụ:
Input
7

Output
270

Ghi chú: Có 50% số test ứng với 50% số điểm của bài có 𝑘 ≤ 106

Bài 5. Hai thành phần (2 điểm - Tên file chương trình: B5.cpp)
Dư lượng thuốc bảo vệ thực vật trong rau quả đang làm đau đầu các nhà sản xuất và cũng là mối
lo của người tiêu dùng.
Mới đây các nhà nghiên cứu đã chế tạo thành công thuốc bảo vệ hai thành phần, vừa có khả năng
bảo vệ cây trồng khỏi nhiều loại sâu bệnh vừa có khả năng tự trung hòa phân hủy nếu pha chế
các thành phần theo tỷ lệ thích hợp. Thuốc được điều chế dưới dạng lỏng. Thành phần thứ nhất
cần dùng từ 𝑎 đến 𝑏 lít, ít hơn sẽ khơng tác dụng, nhiều hơn - sẽ phản tác dụng! Thành phần thứ
hai cần dùng từ 𝑐 đến 𝑑 lít với lý do tương tự. Ngồi ra nếu dùng 𝑥 lít thành phần thứ nhất pha
với 𝑦 lít thành phần thứ hai thì hỗn hợp sẽ có khả năng tự trung hịa và phân hủy nếu như 𝑥 + 𝑦
chia hết cho 𝑘. Khi đó ta sẽ thu được 𝑥 + 𝑦 lít thuốc
Yêu cầu: Tính lượng thuốc tối đa thu được.
Dữ liệu: Nhập từ bàn phím lần lượt năm số nguyên dương 𝑎, 𝑏, 𝑐, 𝑑, 𝑘 (1 ≤ 𝑎, 𝑏, 𝑐, 𝑑, 𝑘 ≤
109 ; 𝑎 ≤ 𝑏; 𝑐 ≤ 𝑑)
Kết quả: In ra một số nguyên là lượng thuốc tối đa thu được.
Ví dụ:
Input
1 10 1 7 3

Output
15

(Dùng 9 lít thành phần 1 và 6 lít
thành phần 2)

Ghi chú: Có 50% số test của đề bài ứng với 50% số điểm của bài có 𝑎, 𝑏, 𝑐, 𝑑 ≤ 5000
---HẾT--Trang: 2


ĐÁP ÁN ĐỀ THI NĂNG KHIẾU LẦN 1
(Lớp 10 TIN)
Bài 1: Minh họa như hình vẽ dưới đây
h

a

x
h+x

Theo định lý Pitago:
(ℎ + 𝑥 )2 = 𝑥 2 + 𝑎2
↔ ℎ2 + 𝑥 2 + 2ℎ𝑥 = 𝑥 2 + 𝑎2
𝑎2 − ℎ2
↔𝑥=
2ℎ
Code:
#include <bits/stdc++.h>
using namespace std;
int main() {
double a, h, x;
scanf ("%lf %lf", &h, &a);
x = (a * a - h * h) / 2 / h;

printf ("%0.2f", x);
}

Bài 2:
Phân tích 𝑛 = 𝑘 ∙ 𝑎 + 𝑟 với 𝑘 = 𝑛/𝑎, 𝑟 = 𝑛 % 𝑎
Có 4 trường hợp xảy ra:
• 𝑘%4 = 0 : Điểm dừng ở cạnh (0,0) → (0, 𝑎) . Đáp số (0, 𝑟)
• 𝑘%4 = 1 : Điểm dừng ở cạnh (0, 𝑎) → (𝑎, 𝑎) . Đáp số (𝑟, 𝑎)
• 𝑘%4 = 2 : Điểm dừng ở cạnh (𝑎, 𝑎) → (𝑎, 0). Đáp số (𝑎, 𝑎 − 𝑟)
• 𝑘%4 = 3 : Điểm dừng ở cạnh (𝑎, 0) → (0,0). Đáp số (𝑎 − 𝑟, 0)
Code:
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, n;
cin >> a >>
int k = n /
int r = n %
int x, y;
switch (k %

n;
a;
a;
4) {

Trang: 3


case 0:

x = 0, y =
break;
case 1:
x = r, y =
break;
case 2:
x = a, y =
break;
case 3:
x = a - r,
break;
}
cout << x << "

r;

a;

a - r;

y = 0;

" << y;

}

Bài 3:
Giả sử gmax là biến lưu giá trị lớn nhất hiện có, biến dem lưu số lượng học sinh đạt điểm gmax
(đáp số). Khi đó nếu nhập thêm học sinh có điểm a:
if (a>gmax) gmax=a, dem=1;

else if (a==gmax) ++dem;
Code:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
int gmax = 0, res
for (int i = 1; i
int u;
cin >> u;
if (u > gmax)
gmax = u,
else if (u ==
++res;
}
cout << res;
}

= 0;
<= n; ++i) {

res = 1;
gmax)

Bài 4:
Đặt 𝑘 = 5 × 𝑚 + 𝑟 ở đây (0 ≤ 𝑟 < 5). Ta có cơng thức tính thời gian như sau:
150 ∙ 𝑚 ∙ (𝑚 + 1)
𝑇 = 30 ∙ 5 ∙ (1 + 2+. . +𝑚) + 30 ∙ 𝑟 ∙ (𝑚 + 1) =
+ 30 ∙ 𝑟 ∙ (𝑚 + 1)

2
Code:
#include <bits/stdc++.h>
using namespace std;
int main() {
int k;
cin >> k;
int m = k / 5, r = k % 5;

Trang: 4


cout << 150 * (long long) m* (m + 1) / 2 + 30 * (long long) r* (m + 1);
}

Bài 5: Suy luận đơn giản nhờ các nhận xét:
• Nếu khơng tính đến điều kiện tự phân hủy thì dung lượng tối đa của hỗn hợp là 𝑟𝑒𝑠 =
𝑏 + 𝑑. Khi đó:
• Nếu 𝑟𝑒𝑠 chia hết cho 𝑘 thì 𝑟𝑒𝑠 là đáp số, ngược lại:
• Cần rút bớt lượng tối thiểu (𝑏 + 𝑑 )% 𝑘
• Lượng tối đa có thể rút là (𝑏 − 𝑎) + (𝑑 − 𝑐)
• Nếu (𝑏 − 𝑎) + (𝑑 − 𝑐 ) < (𝑏 + 𝑑 )%𝑘 không tồn tại cách pha (đáp số 0)
• Ngược lại đáp số là (𝑏 + 𝑑 ) − (𝑏 + 𝑑 )%𝑘. Chú ý rằng ta ln có thể xây dựng được cách
pha bằng cách chẳng hạn rút dần thành phần 2 (tối đa là 𝑑 − 𝑐) nếu chưa đủ thì rút
thành phần 1.
Code:
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, d, k;

cin >> a >> b >> c >> d >> k;
int res = b + d;
if (res % k) {
int r = res % k;
int rmax = (b - a) + (d - c);
if (r > rmax)
res = 0;
else
res -= r;
}
cout << res;
}

Trang: 5



×