You are on page 1of 25

GV: Trương Phước Hải

BÀI TẬP LẬP TRÌNH

HAI TẬP

Cho tập gồm 𝑛 số nguyên {1,2, … , 𝑛}. Hãy chia tập thành 2 tập con có tổng bằng nhau.

Dữ liệu: Vào từ tập tin văn bản TWOSETS.INP chứa số nguyên 𝑛(1 ≤ 𝑛 ≤ 106 ).

Kết quả: Ghi ra tập tin văn bản TWOSETS.OUT

- Dòng đầu tiên ghi YES tương ứng với có cách chia, ngược lại in NO.
- Nếu có cách chia thì in ra một cách chia trên 4 dòng như sau:
+ Dòng đầu tiên ghi số nguyên 𝑎 – số phần tử của tập thứ nhất.
+ Dòng thứ hai ghi 𝑎 số nguyên là các phần tử của tập thứ nhất.
+ Dòng thứ ba ghi số nguyên 𝑏 – số phần tử của tập thứ hai.
+ Dòng thứ tư ghi 𝑏 số nguyên là các phần tử của tập thứ hai.

Ví dụ:

TWOSETS.INP TWOSETS.OUT
7 YES
4
1 2 4 7
3
3 5 6
6 NO

1/25
GV: Trương Phước Hải

VLTK

Bờm là một học sinh rất mê game. Cậu tích cực ngày đêm cày cuốc để nhân vật của mình ngày càng mạnh
lên. Gần đây do thầy giáo cho khá nhiều bài tập tin học nên cậu ta buộc phải giảm bớt cày cuốc game. Tuy
nhiên cậu ta lại không muốn nhân vật của mình yếu đi và có thể bị tiêu diệt trong khi làm bài tập nên phải
mua vật phẩm để tăng sức mạnh cho nhân vật.

Có 2 loại vật phẩm giúp tăng sức mạnh cho nhân vật: tăng trực tiếp và tăng theo tỉ lệ phần trăm. Cụ thể, nếu
nhân vật có sức mạnh là 𝑏 và có 𝑛 vật phẩm tăng trực tiếp có giá trị tương ứng 𝑑1 , 𝑑2 , … , 𝑑𝑛 và 𝑚 vật phẩm
tăng theo tỉ lệ phần trăm có giá trị tương ứng 𝑝1 , 𝑝2 , … , 𝑝𝑚 thì sức mạnh của nhân vật sẽ tăng lên thành
(𝑏 + 𝑑1 + 𝑑2 + ⋯ + 𝑑𝑛 ) ∗ (100 + 𝑝1 + 𝑝2 + ⋯ + 𝑝𝑚 )/100.

Nhưng không may là game giới hạn số vật phẩm được phép sử dụng tối đa là 𝑘 cho cả 2 loại và mỗi vật
phẩm chỉ được phép sử dụng không quá 1 lần. HungDM đang đau đầu vì không biết nên chọn mua những
vật phẩm nào để có lợi nhất.

Yêu cầu: Hãy giúp Bờm chọn vật phẩm để chỉ số sức mạnh của nhân vật được tăng tối đa.

Dữ liệu: Vào từ tập tin văn bản VLTK.INP

- Dòng đầu tiên chứa 3 số nguyên dương 𝑏, 𝑘, 𝑛, 𝑚(0 ≤ 𝑏, 𝑘, 𝑛, 𝑚 ≤ 50000)


- Dòng thứ hai chứa dãy 𝑛 số nguyên 𝑑1 , 𝑑2 , … , 𝑑𝑛 (0 ≤ 𝑑𝑖 ≤ 50000)
- Dòng thứ ba chứa dãy 𝑚 số nguyên 𝑝1 , 𝑝2 , … , 𝑝𝑚 (0 ≤ 𝑝𝑖 ≤ 50000)

Kết quả: Ghi ra tập tin văn bản VLTK.OUT

- Dòng đầu tiên ghi 2 số 𝑛𝑑, 𝑛𝑝(0 ≤ 𝑛𝑑 ≤ 𝑛; 0 ≤ 𝑛𝑝 ≤ 𝑚; 0 ≤ 𝑛𝑑 + 𝑛𝑝 ≤ 𝑘) tương ứng với số vật
phẩm tăng trực tiếp và tăng theo tỉ lệ phần trăm được chọn.
- Dòng thứ hai ghi chỉ số các vật phẩm loại tăng trực tiếp được chọn
- Dòng thứ ba ghi chỉ số các vật phẩm loại tăng theo tỉ lệ phần trăm được chọn

Ví dụ:
VLTK.INP VLTK.OUT
70 3 2 2 2 1
40 30 2 1
50 40 1

2/25
GV: Trương Phước Hải

DÃY DÀI NHẤT

Có 𝑛 + 1 quân bài, trong số đó có một quân bài trắng, trên mỗi quân bài còn lại có ghi một số nguyên trong
phạm vi từ 1 đến 𝑛 (1 ≤ 𝑛 ≤ 100000), số ghi trên các quân bài khác nhau từng đôi một.

Người ta trích ra một dãy 𝑘 (1 ≤ 𝑘 ≤ 𝑛). Nếu trong dãy đó có quân bài trống thì ta có thể điền vào đó
một số tùy chọn trong phạm vi từ 1 đến n. Với các số trên quân bài người ta có thể chọn ra dãy dài nhất các
số nguyên liên tiếp nhau. Ví dụ, với 𝑛 = 7, 𝑘 = 5 và các số trên những quân bài được chọn là 6, 2, 0, 4,
7 (kí hiệu 0 ứng với quân bài trống), ta có thể điền vào đó số 5 và được dãy các số nguyên liên tiếp từ 4 đến
7, dãy này có độ dài là 4

6 2 4 7

6 2 5 4 7

Yêu cầu: Cho 𝑛, 𝑘 và các số ghi trên k quân bài được chọn. Hãy xác định độ dài lớn nhất của dãy các số
nguyên liên tiếp có thể nhận được.

Dữ liệu: Vào từ tập tin văn bản L_SEQ.INP:

- Dòng đầu tiên chứa 2 số nguyên 𝑛, 𝑘


- Mỗi dòng trong 𝑘 dòng tiếp theo chứa 1 số nguyên ghi trên quân bài, số 0 tương ứng với quân bài trống

Kết quả: Ghi ra tập tin văn bản L_SEQ.OUT là độ dài lớn nhất tìm được

Ví dụ:

L_SEQ.INP L_SEQ.OUT
7 5 4
6
2
0
4
7

3/25
GV: Trương Phước Hải

DÂY DẪN

Cho 𝑛 đoạn dây điện (1 ≤ 𝑛 ≤ 105 ). Đoạn thứ 𝑖 có độ dài 𝑙𝑖 𝑐𝑚 (0 < 𝑙𝑖 < 109 ). Cần phải cắt các đoạn đã
cho thành các đoạn sao cho có được 𝑘 đoạn dây bằng nhau. Có thể không cần cắt hết các đoạn dây đã cho.
Mỗi đoạn dây bị cắt có thể có phần còn thừa khác 0.

Yêu cầu: Xác định độ dài lớn nhất của đoạn dây có thể nhận được. Nếu không có cách cắt thì đưa ra số 0.

Dữ liệu: Vào từ tập tin văn bản WIRES.INP gồm nhiều tests, mỗi test trên một nhóm dòng

- Dòng đầu tiên chứa 2 số nguyên 𝑛 và 𝑘


- Dòng thứ i trong n dòng tiếp theo chứa số nguyên 𝑙𝑖

Kết quả: Ghi ra tập tin văn bản WIRES.OUT, kết quả mỗi test đưa ra trên một dòng dưới dạng số nguyên

Ví dụ:

WIRES.INP WIRES.OUT
4 11 200
802
743
547
539

4/25
GV: Trương Phước Hải

ĐẠI DIỆN

Trên trục số cho 𝑛 đoạn đóng, đoạn thứ 𝑖 là [𝐿𝑖 , 𝑅𝑖 ]. Hãy chọn ra một tập ít nhất các điểm nguyên phân biệt
trên trục số thoả mãn: Mỗi đoạn trong số 𝑛 đoạn đã cho phải chứa tối thiểu 2 điểm trong tập này.

Dữ liệu: Vào từ tập tin văn bản REP.INP

- Dòng 1: chứa số nguyên dương 𝑛 ≤ 105


- Trong 𝑛 dòng tiếp theo, dòng thứ 𝑖 chứa hai số nguyên 𝐿𝑖 , 𝑅𝑖 (∀𝑖: −106 ≤ 𝐿𝑖 < 𝑅𝑖 ≤ 106 )

Kết quả: Ghi ra tập tin văn bản REP.OUT

- Dòng 1: Ghi số điểm được chọn 𝑚


- Dòng 2: Ghi các toạ độ (trên trục số) của 𝑚 điểm được chọn

Ví dụ:

REP.INP REP.OUT
3 3
6 10 4 6 9
1 6
4 9

5/25
GV: Trương Phước Hải

ĐOẠN 0

Cho dãy số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 (1 ≤ 𝑛 ≤ 105 ; |𝑎𝑖 | ≤ 106 ). Hãy tìm một đoạn dài nhất gồm các phần tử
liên tiếp trong dãy 𝑎𝐿 , 𝑎𝐿+1 , … , 𝑎𝐻 có tổng bằng 0

Dữ liệu: Vào từ tập tin văn bản SZERO.INP

- Dòng 1: Chứa số 𝑛.
- Dòng 2: Chứa 𝑛 số 𝑎1 , 𝑎2 , … , 𝑎𝑛 theo đúng thứ tự cách nhau ít nhất một dấu cách.

Kết quả: Ghi ra tập tin văn bản SZERO.OUT hai số 𝐿, 𝐻 tìm được.

Ví dụ:

SZERO.INP SZERO.OUT
9 2 8
2 7 5 -3 -2 4 -9 -2 1

Dữ liệu vào được cho hợp lý để luôn tồn tại lời giải của bài toán.

6/25
GV: Trương Phước Hải

DÃY SỐ HAMMING

Dãy số nguyên dương tăng dần, trong đó ước nguyên tố của mỗi số không quá 5 được gọi là dãy Hamming.
Như vậy, 10 = 2×5 sẽ là một số trong dãy Hamming, còn 26 = 2×13 – không thuộc dãy Hamming.

Phần đầu của dãy Hamming là 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, . . .

Yêu cầu: Cho số nguyên 𝑥(1 ≤ 𝑥 ≤ 1018 ). Hãy xác định số thứ tự của 𝑥 trong dãy Hamming.

Dữ liệu: vào từ tập tin văn bản HAMMING.INP:

- Dòng đầu tiên chứa số nguyên 𝑡 – số lượng tests (1 ≤ 𝑡 ≤ 105 )


- Mỗi dòng tiếp theo chứa một số nguyên 𝑥

Kết quả: ghi ra tập tin văn bản HAMMING.OUT, kết quả mỗi test đưa ra trên một dòng dưới dạng số
nguyên hoặc thông báo Not in sequence.

Ví dụ:

HAMMING.INP HAMMING.OUT
11 1
1 2
2 6
6 Not in sequence
7 7
8 8
9 9
10 Not in sequence
11 10
12 Not in sequence
13 Not in sequence
14

7/25
GV: Trương Phước Hải

XÓA CHỮ SỐ

Cho 𝑆 là xâu gồm 𝑛 ký tự (𝑛 < 106 ) là các chữ số là biểu diễn thập phân của một số nguyên dương. Hãy
xóa trong xâu 𝑆 đi đúng 𝑘 chữ số (𝑘 < 𝑛) để thu được xâu 𝑇 là biểu diễn thập phân của một số nguyên
dương với giá trị lớn nhất có thể.

Dữ liệu: Vào từ tập tin văn bản DIGIT.INP

- Dòng 1 chứa xâu 𝑆.


- Dòng 2 chứa số nguyên dương 𝑘.

Kết quả: Ghi ra tập tin văn bản DIGIT.OUT xâu 𝑇 tìm được.

Ví dụ:

DIGIT.INP DIGIT.OUT
7918256 9856
3

8/25
GV: Trương Phước Hải

QUÀ TẶNG

Một công ty công nghệ có không quá 5000 nhân viên. Để giúp cho việc quản lý các nhân viên bằng hệ thống
phần mềm, mỗi nhân viên được cấp một mã số ID là một số nguyên dương có tối đa 18 chữ số.

Trong buổi tiệc gala mừng kỉ niệm ngày thành lập, phần bốc thăm trúng quà như truyền thống được Ban
giám đốc đổi mới bằng cách tặng quà cho các nhân viên có mã số ID là trung bình cộng ID của 2 nhân viên
khác trong công ty.

Yêu cầu: Cho danh sách ID của các nhân viên trong công ty. Cho biết số lượng nhân viên được nhận quà
tặng trong đêm gala.

Dữ liệu: Vào từ tập tin văn bản GIFTS.INP chứa dãy số nguyên là ID của tất cả nhân viên trong công ty,
các ID cách nhau bởi khoảng trắng.

Kết quả: Ghi ra tập tin văn bản GIFTS.OUT một số nguyên là số nhân viên được nhận quà.

Ví dụ:

GIFTS.INP GIFTS.OUT
1 2 3 4 5 6 7 5

9/25
GV: Trương Phước Hải

PHÂN MÁY

Trong một ngày làm việc, một trung tâm tính toán nhận được đơn đặt thuê máy của trung tâm để làm việc
của 𝑛 khách hàng. Khách hàng 𝑖 yêu cầu được bố trí làm việc liên tục trên một máy của trung tâm trong
khoảng thời gian từ 𝑎𝑖 đến 𝑏𝑖 . Lưu ý là thời gian để một máy của trung tâm chuyển từ việc kết thúc phục vụ
một khách hàng sang phục vụ một khách hàng khác được coi là bằng 0, nghĩa là nếu một máy kết thúc việc
phục vụ một khách hàng nào đó tại thời điểm 𝑡, thì cũng tại thời điểm 𝑡 máy có thể bắt đầu phục vụ yêu cầu
của một khách hàng khác. Mỗi ngày làm việc, khi kết thúc việc phục vụ tất cả khách hàng, trung tâm phải
tiến hành công tác bảo trì cho tất cả máy. Do đó trung tâm muốn xác định xem trong ngày đang xét cần phải
đưa ra ít nhất bao nhiêu máy để phục vụ tất cả yêu cầu của 𝑛 khách hàng.

Yêu cầu: Hãy giúp trung tâm tính toán giải quyết vấn đề nói trên.

Dữ liệu: Vào từ tập tin văn bản PHANMAY.INP

- Dòng đầu tiên chứa số nguyên dương 𝑛(𝑛 ≤ 105 )


- Dòng thứ 𝑖 trong 𝑛 dòng tiếp theo chứa 2 số nguyên 𝑎𝑖 , 𝑏𝑖 là thời điểm bắt đầu và kết thúc việc phục vụ
khách hàng thứ 𝑖(0 ≤ 𝑎𝑖 < 𝑏𝑖 < 109 ).

Kết quả: Ghi ra tập tin văn bản PHANMAY.OUT một số nguyên dương là số lượng máy ít nhất mà trung
tâm cần đưa ra để phục vụ tất cả yêu cầu của 𝑛 khách hàng.

Ví dụ:

PHANMAY.INP PHANMAY.OUT
10 3
900 1030
900 1230
900 1030
1100 1230
1100 1400
1300 1430
1300 1430
1400 1630
1500 1630
1500 1630

10/25
GV: Trương Phước Hải

XẾP SỐ

Giáo sư X dự định lát một hàng gạch vào chân


224 96 9 22 68
tường phòng máy tính. Có 𝑛 viên gạch đánh
số từ 1 tới 𝑛, trên viên gạch thứ 𝑖 ghi số
nguyên dương 𝑎𝑖 . 9 96 68 224 22

Mong muốn của giáo sư X là đặt 𝑛 viên gạch


9966822422
thành một hàng theo chiều ngang (không được
xoay hay lật viên gạch) sao cho dãy các chữ số ghi trên các viên gạch (tính từ trái qua phải) tạo thành một
biểu diễn thập phân của một số nguyên lớn nhất có thể. Hãy giúp giáo sư X tìm cách lát, cho biết dãy chữ
số tạo thành theo cách lát tìm được.

Dữ liệu: Vào từ tập tin văn bản MAXNUM.INP

- Dòng đầu tiên chứa số nguyên dương 𝑛 ≤ 105 .


- Dòng thứ hai chứa 𝑛 số nguyên dương 𝑎1 , 𝑎2 , … , 𝑎𝑛 (𝑎𝑖 ≤ 109 ).

Kết quả: Ghi ra tập tin văn bản MAXNUM.OUT dãy chữ số từ trái qua phải theo cách lát tìm được (cách
chữ số phải ghi liền nhau).

Ví dụ:

MAXNUM.INP MAXNUM.OUT
5 9966822422
224 96 9 22 68

11/25
GV: Trương Phước Hải

CÁC CÂU ĐỐ BÍ HIỂM

Bà của Bờm thường ra cho cháu mình những bài toán đố mà Bờm coi là bí hiểm. Buổi tối vừa rồi bà đố
Bờm bài toán sau:

“Ở cửa hàng cạnh nhà ta có 𝑘 mặt hàng với giá khác nhau từ 1 đến 𝑘. Bà có 𝑛 đồng tiền mệnh giá
𝑎1 , 𝑎2 , … , 𝑎𝑛 . Bà định sang bên đấy mua một mặt hàng nào đó, trả đúng giá của nó mà không phải nhận lại
tiền thừa. Nhưng bà đã già quá rồi. Bà không muốn mang tất cả tiền của mình đi, có thể lẫn hoặc rơi mất,
vì vậy bà chỉ mang theo một số đồng đầu tiên. Vậy bà phải mang theo bao nhiêu đồng tiền để mua được
mặt hàng bất kỳ?”

Chỉ mất vài giây Bờm đã đưa ra được câu trả lời và nghĩ thầm trong bụng: “Ôi, bà ơi, lại những bài toán
giải thuật quá chuẩn!”.

Bạn có thể đua tài với Bờm bằng cách viết chương trình giải bài toán này được không?

Dữ liệu: Vào từ tập tin văn bản QUIZZES.INP

- Dòng đầu tiên chứa số nguyên 𝑇 – số bộ tests


- Mỗi bộ test cho trên 2 dòng:
+ Dòng thứ nhất chứa 2 số nguyên 𝑛, 𝑘(1 ≤ 𝑛 ≤ 105 ; 1 ≤ 𝑘 ≤ 106 )
+ Dòng thứ hai chứa 𝑛 số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 (1 ≤ 𝑎𝑖 ≤ 105 ).

Kết quả: Ghi ra tập tin văn bản QUIZZES.OUT, kết quả mỗi test đưa ra trên một dòng dưới dạng số nguyên.
Nếu không có cách mang thì đưa ra số -1.

Ví dụ:

QUIZZES.INP QUIZZES.OUT
3 4
7 10 3
1 2 3 4 5 6 7 -1
3 3
2 4 1
3 6
3 1 4

12/25
GV: Trương Phước Hải

SỐ PALINDROME

Số Palindrome là số có tính chất khi viết các chữ số theo thứ tự ngược lại thì giá trị của nó không thay đổi.
Chẳng hạn các số sau là số Palindrome: 8, 22, 3113, 52125, … Xét dãy gồm các số Palindrome tăng dần,
phần tử đầu tiên là 1 và có thứ tự 1.

Yêu cầu: Hãy tìm số Palindrome thứ 𝑛(𝑛 ≤ 106 ).

Dữ liệu: Vào từ tập tin văn bản PALINDROME.INP chứa số nguyên dương 𝑛.

Kết quả: Ghi ra tập tin văn bản PALINDROME.OUT số Palindrome có thứ tự 𝑛.

Ví dụ:

PALINDROME.INP PALINDROME.OUT
30 212

13/25
GV: Trương Phước Hải

ĐIỆN THOẠI

Có 𝑛 cái bàn được đặt liền kề nhau, các bàn được đánh thứ tự từ 1 đến 𝑛. Trên mỗi bàn có thể có một chiếc
điện thoại, một số bàn còn lại thì không. Những chiếc điện thoại có một đặc điểm kì lạ: chiếc điện thoại ở
bàn thứ 𝑖 đổ chuông nếu điện thoại ở bàn thứ 𝑗 cách đó không quá 𝑑 vị trí đổ chuông, nghĩa là |𝑖 − 𝑗| ≤ 𝑑.
Bàn đầu tiên và bàn cuối cùng luôn được đặt một chiếc điện thoại. Ban đầu, chiếc điện thoại ở bàn thứ nhất
đổ chuông. Việc đó có thể khiến cho những chiếc điện thoại còn lại đổ chuông và lan truyền đến điện thoại
được đặt ở bàn cuối cùng nếu chúng được bố trí một cách hợp lý.

Yêu cầu: Cho dãy các vị trí đặt điện thoại. Hãy tìm số lượng điện thoại ít nhất cần đặt thêm vào dãy bàn sao
cho chiếc điện thoại cuối cùng được đổ chuông.

Dữ liệu: Vào từ tập tin văn bản TELEFONE.INP

- Dòng đầu tiên chứa hai số nguyên 𝑛, 𝑑(1 ≤ 𝑛 ≤ 300 000; 1 ≤ 𝑑 ≤ 𝑛)


- Dòng tiếp theo chứa dãy gồm 𝑛 số, số thứ 𝑖 là 1 nếu bàn thứ 𝑖 được đặt một chiếc điện thoại, ngược lại
số thứ 𝑖 là 0.

Kết quả: Ghi ra tập tin vản bản TELEFONE.OUT một số nguyên là số điện thoại ít nhất cần đặt thêm.

Ví dụ:

TELEFONE.INP TELEFONE.OUT
8 2 2
1 1 0 0 1 0 0 1

14/25
GV: Trương Phước Hải

CẤP SỐ CỘNG

Cho dãy số nguyên 𝐴 = (𝑎1 , 𝑎2 , … , 𝑎𝑛 ). Ta nói trong dãy 𝐴 tồn tại bộ ba cấp số cộng nếu tồn tại công sai
Δ > 0 và ba phần tử phân biệt 𝑎𝑖 , 𝑎𝑗 , 𝑎𝑘 trong dãy 𝐴 thỏa:

𝑎𝑘 − 𝑎𝑗 = 𝑎𝑗 − 𝑎𝑖 = Δ

Với 2 bộ ba cấp số cộng (𝑎𝑖1 , 𝑎𝑗1 , 𝑎𝑘1 ) và(𝑎𝑖2 , 𝑎𝑗2 , 𝑎𝑘2 ), ta nói bộ ba (𝑎𝑖1 , 𝑎𝑗1 , 𝑎𝑘1 ) nhỏ hơn bộ ba
(𝑎𝑖2 , 𝑎𝑗2 , 𝑎𝑘2 ) theo thứ tự từ điển nếu:

- Hoặc 𝑎𝑖1 < 𝑎𝑖2


- Hoặc 𝑎𝑖1 = 𝑎𝑖2 và 𝑎𝑗1 < 𝑎𝑗2
- Hoặc 𝑎𝑖1 = 𝑎𝑖2 , 𝑎𝑗1 = 𝑎𝑗2 và 𝑎𝑘1 < 𝑎𝑘2

Yêu cầu: Hãy tìm trong dãy 𝐴 một bộ ba cấp số cộng nhỏ nhất theo thứ tự từ điển.

Dữ liệu: Vào từ tập tin văn bản TRIPLE.INP

- Dòng đầu tiên chứa số nguyên dương 𝑛 ≤ 5000.


- Dòng tiếp theo chứa dãy gồm 𝑛 số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 (|𝑎𝑖 | ≤ 2.109 ).

Kết quả: Ghi ra tập tin văn bản TRIPLE.OUT giá trị ba phần tử của bộ ba cấp số cộng tìm được theo thứ
tự tăng dần. Trong trường hợp không tồn tại bộ ba cấp số cộng trong dãy𝐴 thì ghi ba số 0.

Ví dụ:

TRIPLE.INP TRIPLE.OUT
7 -7 -1 5
5 1 -7 2 -1 3 6

15/25
GV: Trương Phước Hải

CHUỖI HẠT

Mai mua được một chuỗi hạt đá rất đẹp, mỗi viên đá mang 1 trong 26 màu riêng biệt và được kí hiệu bằng
các chữ cái a,b,c,..,z. Vì chuỗi hạt khá dài nên Mai muốn cắt ra một đoạn để làm vòng đeo tay hoặc vòng
cổ. Theo Mai, chiếc vòng có tính thẫm mỹ chỉ khi nó có đủ 𝑘 màu khác nhau.

Yêu cầu: Cho chuỗi hạt được mô tả bằng xâu kí tự in thường. Hãy giúp Mai cắt ra một đoạn hạt ngắn nhất
sao cho có đủ 𝑘 màu khác nhau.

Dữ liệu: Vào từ tập tin văn bản BEADS.INP

- Dòng đầu tiên chứa chuỗi kí tự chữ cái in thường có độ dài không quá 105 .
- Dòng tiếp theo chứa số nguyên 𝑘(𝑘 ≥ 1).

Kết quả: Ghi ra tập tin văn bản BEADS.OUT một số nguyên là độ dài nhỏ nhất của đoạn hạt cắt được hoặc
−1 nếu không tìm được cách cắt thỏa yêu cầu.

Ví dụ:

BEADS.INP BEADS.OUT
ddaahhceeeeaabb 5
4

16/25
GV: Trương Phước Hải

LÙA BÒ

Bờm được Phú Ông giao chăn đàn bò gồm 𝑛 con được đánh số từ 1 đến 𝑛. Trong lúc Bờm đang mê ngủ,
các con bò đã lẻn vào vườn trồng hoa quý của Phú Ông. Ngay khi Bờm phát hiện thì các con bò bắt đầu ăn
hoa và Bờm quyết định phải đưa tất cả chúng về chuồng ngay lập tức.

Con bò thứ 𝑖 có tốc độ ăn 𝑑𝑖 cây hoa trong mỗi phút chờ đợi và nó đang ở cách chuồng một quãng đường
mất 𝑡𝑖 phút để di chuyển. Ở mỗi thời điểm, Bờm chỉ có thể đưa một con bò về chuồng. Bờm mất 2 × 𝑡𝑖 phút
để đưa con bò thứ 𝑖 về chuồng và quay trở lại.

Bờm đang lo lắng vì không biết đưa cả đàn bò về chuồng thế nào để tổng số hoa quý của Phú Ông bị thiệt
hại là ít nhất.

Yêu cầu: Cho 2 dãy số nguyên 𝑡𝑖 và 𝑑𝑖 tương ứng với thời gian di chuyển về chuồng và tốc độ ăn hoa của
con bò thứ 𝑖. Hãy tính số cây hoa bị thiệt hại ít nhất sau khi cả đàn bò về chuồng.

Dữ liệu: Vào từ tập tin văn bản COWS.INP

- Dòng đầu tiên chứa số nguyên 𝑛(2 ≤ 𝑛 ≤ 105 )


- Dòng thứ 𝑖 trong 𝑛 dòng tiếp theo chứa 2 số nguyên 𝑡𝑖 , 𝑑𝑖 (1 ≤ 𝑡𝑖 ≤ 2 × 106 ; 1 ≤ 𝑑𝑖 ≤ 100).

Kết quả: Ghi ra tập tin văn bản COWS.OUT một số nguyên là số cây hoa ít nhất bị đàn bò ăn.

Ví dụ:

COWS.INP COWS.OUT
6 86
3 1
2 5
2 3
3 2
4 1
1 6

17/25
GV: Trương Phước Hải

MÁY SẢN XUẤT

Một nhà máy có 𝑛 máy sản xuất, các máy được đánh số từ 1 đến 𝑛. Máy thứ 𝑖 cần 𝑡𝑖 đơn vị thời gian để sản
xuất ra một sản phẩm. Các máy sản xuất có thể hoạt động đồng thời và có thể được lên lịch để vận hành
một cách tự do.

Yêu cầu: Tính thời gian tối thiểu để nhà máy sản xuất 𝐾 sản phẩm.

Dữ liệu: Vào từ tập tin văn bản MACHINES.INP

- Dòng đầu tiên chứa 2 số nguyên 𝑛, 𝐾(1 ≤ 𝑛 ≤ 2 × 105 ; 1 ≤ 𝐾 ≤ 109 ) – số lượng máy sản xuất và số
lượng sản phẩm cần sản xuất.
- Dòng tiếp theo chứa dãy gồm 𝑛 số nguyên 𝑡1 , 𝑡2 , … , 𝑡𝑛 (1 ≤ 𝑡𝑖 ≤ 109 ) – thời gian cần thiết để các máy
tương ứng sản xuất ra một sản phẩm.

Kết quả: Ghi ra tập tin văn bản MACHINES.OUT một số nguyên là tổng thời gian tối thiểu để sản xuất ra
𝐾 sản phẩm.

Ví dụ:

MACHINES.INP MACHINES.OUT
3 7 8
3 2 5

Giải thích: máy 1 sản xuất 2 sản phẩm, máy 2 sản xuất 4 sản phẩm, máy 3 sản xuất 1 sản phẩm.

18/25
GV: Trương Phước Hải

ƯỚC CHUNG LỚN NHẤT

Steve rất thích bày ra các trò chơi mới để tiêu khiển cùng các bạn. Lần này Steve rủ các bạn chơi bài với
một luật mới như sau: mỗi người sẽ được chia 𝑛 lá bài, trên mỗi lá bài có ghi một số nguyên dương. Điểm
của người chơi là ước chung lớn nhất của 𝑛 giá trị được ghi trên các lá bài được chia. Người nào có điểm
cao nhất thì sẽ thắng ván bài đó.

Vì muốn mình có được điểm cao nhất có thể có trong mỗi ván bài nên Steve toan tính giấu đi một lá bài của
mình. Nhưng cậu ta lại chưa biết là sẽ giấu lá bài nào để có được điểm cao nhất.

Yêu cầu: Cho dãy số 𝑎1 , 𝑎2 , … , 𝑎𝑛 là các giá trị ghi trên các lá bài của Steve. Hãy chỉ ra lá bài cần phải bỏ
đi để đạt được điểm cao nhất.

Dữ liệu: Vào từ tập tin văn bản GCD.INP

- Dòng đầu tiên chứa số nguyên dương 𝑛(2 ≤ 𝑛 ≤ 105 )


- Dòng tiếp theo chứa dãy 𝑎1 , 𝑎2 , … , 𝑎𝑛 (1 ≤ 𝑎𝑖 ≤ 109 )

Kết quả: Ghi ra tập tin văn bản GCD.OUT hai số nguyên: số thứ nhất là vị trí của lá bài cần phải giấu đi,
số thứ hai là điểm của ván bài sau khi giấu đi 1 lá bài.

Ví dụ:

GCD.INP GCD.OUT
5 3 2
2 2 3 4 6

19/25
GV: Trương Phước Hải

ĐUA HEO

Hai Phú Ông của làng trên và làng dưới tổ chức đua heo để mừng xuân Kỷ Hợi. Mỗi người chọn ra 𝑛 con
heo tốt nhất của mình để thi đấu. Chỉ số sức mạnh đàn heo của Phú Ông làng trên là 𝑎1 , 𝑎2 , … , 𝑎𝑛 , và đàn
heo của Phú Ông làng dưới là 𝑏1 , 𝑏2 , … , 𝑏𝑛 . Phú Ông làng này cho từng con heo của mình lần lượt thi đấu
với tất cả đàn heo của Phú Ông làng kia và ngược lại, nghĩa là mỗi con heo của mỗi Phú Ông sẽ phải thi đấu
đúng 𝑛 trận đấu. Con heo nào có chỉ số sức mạnh cao hơn sẽ chiến thắng và được 3 điểm, nếu 2 con có cùng
chỉ số sức mạnh thì hòa nhau và cả 2 đều được 1 điểm, nếu thua thì không được điểm nào.

Bờm đứng xem và cười thầm: các lão trọc Phú chỉ khéo khoe của vì chẳng cần mất công thi đấu thì Bờm
cũng biết được điểm số kết cuộc của cuộc thi nếu như biết trước được chỉ số sức mạnh của từng con heo.

Yêu cầu: Cho 2 dãy số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 và 𝑏1 , 𝑏2 , … , 𝑏𝑛 . Hãy cho biết điểm đạt được sau cuộc thi của
2 Phú Ông.

Dữ liệu: Vào từ tập tin văn bản PIGRACE.INP

- Dòng đầu tiên chứa số nguyên 𝑛(𝑛 ≤ 105 )


- Dòng thứ hai chứa dãy 𝑎1 , 𝑎2 , … , 𝑎𝑛 (1 ≤ 𝑎𝑖 ≤ 109 )
- Dòng thứ ba chứa dãy 𝑏1 , 𝑏2 , … , 𝑏𝑛 (1 ≤ 𝑏𝑖 ≤ 109 )

Kết quả: Ghi ra tập tin văn bản PIGRACE.OUT 2 số nguyên trên cùng dòng và cách nhau khoảng trắng
tương ứng với điểm số của Phú Ông làng trên và điểm số của Phú Ông làng dưới sau cuộc đấu.

Ví dụ:

PIGRACE.INP PIGRACE.OUT
3 16 10
5 8 2
7 2 4

20/25
GV: Trương Phước Hải

THỨ TỰ PHÂN SỐ

Xét các phân số được sắp xếp và phân loại thành một bảng như hình minh họa. Dòng thứ 𝑖 trong bảng là
các phân số có tử số bằng 𝑖, cột thứ 𝑗 là các phân số có mẫu số
bằng 𝑗. Các phân số được đánh thứ tự từ 1 trở đi theo quy luật
như hình.

Yêu cầu: Cho số nguyên 𝑛. Hãy xác định phân số thứ 𝑛 dưới
dạng 𝑝/𝑞, trong đó 𝑝, 𝑞 là các số nguyên dương.

Dữ liệu: Vào từ tập tin văn bản FRACNUM.INP chứa số


nguyên 𝑛(1 ≤ 𝑛 ≤ 1018 ).

Kết quả: Ghi ra tập tin văn bản FRACNUM.OUT phân số


tìm được dưới dạng 𝑝/𝑞.

Ví dụ:

FRACNUM.INP FRACNUM.OUT
6 3/1

21/25
GV: Trương Phước Hải

TẶNG HOA

Biết mẹ rất thích hoa nên Cường đến cửa hàng hoa mua tặng mẹ một nhánh lan và một bông hồng (loại hoa
mà mẹ Cường rất thích) bằng tiền tiết kiệm của mình nhân ngày của Mẹ. Cửa hàng có 𝑛 nhánh lan đánh số
từ 1 đến 𝑛 với giá tiền tương ứng 𝑎1 , 𝑎2 , … , 𝑎𝑛 và 𝑚 bông hồng đánh số từ 1 đến 𝑚 với giá tiền tương ứng
𝑏1 , 𝑏2 , … , 𝑏𝑚 . Cường muốn mua một nhánh lan và một bông hồng với tổng giá tiền cao nhất (vì cậu nghĩ
giá tiền càng cao thì hoa càng đẹp) nhưng không được vượt quá số tiền tiết kiệm 𝑆.

Yêu cầu: Hãy cho biết chỉ số của nhánh lan và chỉ số của bông hồng cần mua sao cho tổng giá tiền của hai
bó hoa là lớn nhất và không vượt quá 𝑆. Nếu có nhiều cách chọn thì đưa ra một cách chọn một nhánh lan và
một bông hồng có giá tiền chênh lệch nhau ít nhất.

Dữ liệu: Vào từ tập tin văn bản FLOWERS.INP

- Dòng đầu tiên chứa ba số nguyên 𝑛, 𝑚, 𝑆(1 ≤ 𝑛, 𝑚 ≤ 106 ; 1 ≤ 𝑆 ≤ 109 )


- Dòng thứ hai chứa dãy số nguyên 𝑎1 , 𝑎2 , … , 𝑎𝑛 (1 ≤ 𝑎𝑖 ≤ 106 )
- Dòng thứ ba chứa dãy số nguyên 𝑏1 , 𝑏2 , … , 𝑏𝑚 (1 ≤ 𝑏𝑖 ≤ 106 )

Kết quả: Ghi ra tập tin văn bản FLOWERS.OUT trên một dòng hai chỉ số 𝑖 và 𝑗 tương ứng là chỉ số của
nhánh lan và bông hồng cần mua. Trường hợp không tồn tại lời giải thì ghi hai số 0.

Ví dụ:

FLOWERS.INP FLOWERS.OUT
4 6 10 1 5
5 3 7 2
4 1 8 9 5 6

22/25
GV: Trương Phước Hải

KHỐI LẬP PHƯƠNG

Quà sinh nhật của Tí là một bộ xếp hình Lego. Tí xếp thành 𝑛 tháp, tháp thứ 𝑖 có độ cao là 𝑎𝑖.

Tí rất có cảm tình với số nguyên 𝑘, vì vậy dãy liên tục các tháp được coi là hài hòa nếu chúng có độ cao
trung bình là 𝑘.

Yêu cầu: Cho 𝑛, 𝑘 và dãy 𝑎1, 𝑎2, … , 𝑎𝑛. Hãy xác định dãy tháp hài hòa dài nhất, chỉ ra tháp đầu tiên và độ
dài của dãy tìm được. Nếu tồn tại nhiều dãy cùng độ dài thì chỉ ra dãy tháp có vị trí đầu nhỏ nhất. Nếu không
tồn tại dãy tháp thì đưa ra một số 0.

Dữ liệu: Vào từ tập tin văn bản CUBICS.INP

- Dòng đầu tiên chứa 2 số nguyên 𝑛 và 𝑘(1 ≤ 𝑛 ≤ 105; 1 ≤ 𝑘 ≤ 109),


- Dòng thứ hai chứa dãy gồm 𝑛 số nguyên 𝑎1, 𝑎2, … , 𝑎𝑛(1 ≤ 𝑎𝑖 ≤ 109).

Kết quả: Ghi ra tập tin văn bản CUBICS.OUT trên một dòng gồm 2 số nguyên: độ dài của dãy tìm được
và số thứ tự của tháp đầu tiên hoặc một số 0 nếu không tồn tại dãy.

Ví dụ:

CUBICS.INP CUBICS.OUT
5 3 3 2
1 2 3 4 6

23/25
GV: Trương Phước Hải

XÂU FIBONACCI 1

Công thức lặp có thể gặp với cả biểu thức xâu. Biểu thức xâu Fibonacci được xác định bằng công thức lặp
𝐹0 = 𝑎, 𝐹1 = 𝑏, 𝐹2 = 𝐹0 + 𝐹1 , … , 𝐹𝑛 = 𝐹𝑛−2 + 𝐹𝑛−1 , … Các xâu đầu tiên xác định theo công thức lặp này là
a, b, ab, bab, abbab, bababbab, abbabbababbab, …

Độ dài của xâu tăng lên rất nhanh. Vì vậy ta chỉ xét bài toán xác định một ký tự của một xâu trong dãy các
xâu này.

Yêu cầu: Cho 2 số nguyên 𝑛 và 𝑘. Hãy xác định ký tự thứ 𝑘 của xâu 𝐹𝑛 . Các ký tự trong 𝐹𝑛 được đánh số
bắt đầu từ 1.

Dữ liệu: Vào từ tập tin văn bản FIB1.INP

- Dòng đầu tiên chứa số nguyên 𝑇 – số bộ dữ liệu test (1 ≤ 𝑇 ≤ 100),


- Mỗi dòng trong 𝑇 dòng sau chứa 2 số nguyên 𝑛 và 𝑘(0 ≤ 𝑛 ≤ 45; 1 ≤ 𝑘 ≤ 𝑙𝑒𝑛𝑔𝑡ℎ(𝐹𝑛 )).

Kết quả: Ghi ra tập tin văn bản FIB1.OUT, kết quả mỗi test trên một dòng dưới dạng một ký tự.

Ví dụ:

FIB1.INP FIB1.OUT
4 a
0 1 b
1 1 a
3 2 a
7 7

24/25
GV: Trương Phước Hải

XÂU FIBONACCI 2

Xâu Fibonacci thường được sử dụng để rèn luyện kỹ năng xử lý khi giới thiệu các giải thuật xử lý xâu.

Xét dãy xâu F0, F1, F2, . . . xây dựng theo quy tắc sau:

- 𝐹0 = ′𝑎′
- 𝐹1 = ′𝑏′
- 𝐹𝑛 = 𝐹𝑛−2 + 𝐹𝑛−1 , 𝑛 > 1

Yêu cầu: Cho hai số nguyên 𝑛 và 𝑘(0 ≤ 𝑛 ≤ 45) (𝑘 không vượt quá độ dài xâu 𝐹𝑛 ). Hãy xác định số lượng
ký tự 𝑎 xuất hiện trong 𝑘 ký tự đầu tiên của xâu 𝐹𝑛 .

Dữ liệu: Vào từ tập tin văn bản FIB2.INP

- Dòng đầu tiên chứa số nguyên 𝑇 – số lượng tests cần xử lý (1 ≤ 𝑇 ≤ 100),


- Mỗi dòng trong 𝑇 dòng sau chứa 2 số nguyên 𝑛 và 𝑘.

Kết quả: Ghi ra tập tin văn bản FIB2.OUT, kết quả mỗi test đưa ra trên một dòng dưới dạng số nguyên.

Ví dụ:

FIB2.INP FIB2.OUT
4 1
0 1 0
1 1 1
3 2 3
7 7

25/25

You might also like