Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

TRƯỜNG THPT CHUYÊN THÁI NGUYÊN

LỚP TIN 10 K31


BÀI TẬP SẮP XẾP VÀ TÌM KIẾM

Bài 1: Xếp mã số học sinh (SPOJ/CTN: PCH007)


Đề bài:
Trong thời gian tiến hành Đại hội thể dục thể thao, mỗi học sinh được nhận một số
hiệu là một số tự nhiên. Cần sắp danh sách các học sinh tham gia Đại hội theo điểm thi đấu
của họ.
Tệp dữ liệu vào là XEPMASO.INP Dòng đầu tiên là số 𝑁 - số học sinh. Trên mỗi
dòng tiếp theo cho mã số và điểm thi đấu của mỗi học sinh. Tất cả các số không vượt quá
105 .
Tệp kết quả ra là XEPMASO.OUT đưa ra danh sách giảm dần theo thứ tự điểm thi
đấu. Nếu hai học sinh cùng số điểm thì sắp tăng theo mã số.
Trong tệp input cũng như tệp output, thông tin về mỗi học sinh ghi trên một dòng, mã
số ghi trước, điểm thi đấu ghi sau.
Ví dụ
XEPMASO.INP XEPMASO.OUT
3 305 90
101 80 101 80
305 90 200 14
200 14
3 25 90
20 80 30 90
30 90 20 80
25 90
Bài 2: Sắp người xuống bè (SPOJ/CTN: PCH008)
Đề bài:
Các nhà thám hiểm được tập hợp trong cuộc thám hiểm đến miền Bắc cực. Họ có một
chiếc bè lớn gồm N×M chiếc bè nhỏ gắn với nhau. Mỗi chiếc bè nhỏ có một sức chứa riêng,
và mỗi nhà thám hiểm cũng có trọng lượng của mình. Mỗi chiếc bè nhỏ không thể chở hơn
một nhà thám hiểm. Nếu sức chứa của chiếc bè nhỏ hơn trọng lượng nhà thám hiểm chọn nó
thì nhà thám hiểm đó có thể bị chết đuối khi bước xuống chiếc bè nhỏ này. Người lãnh đạo
cuộc thám hiểm nghĩ cách xếp bè. Hãy giúp đỡ ông ta xác định số nhiều nhất các nhà thám
hiểm có thể đi.
Tệp dữ liệu vào là SAPBE.INP. Dòng đầu tiên là các số N và M (1≤N, M≤40). Trong
N dòng tiếp theo, mỗi dòng M số là sức chứa M bè nhỏ. Dòng thứ N+2 là số K (1≤K≤2000)
là số lượng các nhà thám hiểm. Trong dòng thứ N+3 chứa K số, số thứ i trong chúng là trọng
lượng nhà thám hiểm thứ i. Tất cả trọng lượng các nhà thám hiểm và sức chứa các bè không
vượt quá 109.
Tệp kết quả ra là SAPBE.OUT đưa ra một số là số nhiều nhất các nhà thám hiểm tham
gia cuộc thám hiểm này.
Ví dụ:
SAPBE.INP SAPBE.OUT
32 4
5 10
75
55
6
9 5 3 5 12 10
Bài 3: Khiêu vũ (SPOJ/CTN: PCH009)
Đề bài:
Một làng quê có 𝑚 chàng trai đánh số từ 1 tới 𝑚 và 𝑛 cô gái đánh số từ 1 tới 𝑛. Chàng
trai thứ 𝑖 có chiều cao 𝑎𝑖 (𝑖 = 1,2, … , 𝑚), cô gái thứ 𝑗 có chiều cao 𝑏𝑗 (𝑗 = 1,2, … , 𝑛).
Trong một buổi khiêu vũ, người ta muốn chọn ra một số cặp nhảy. Mỗi cặp nhảy gồm
đúng 1 chàng trai và 1 cô gái và trong cặp đó, chàng trai phải cao hơn cô gái. Mỗi chàng trai,
cô gái trong làng không được tham gia quá 1 cặp nhảy.
Yêu cầu: Tìm một số nhiều nhất các cặp nhảy thỏa mãn yêu cầu trên.
Dữ liệu: Vào từ tệp văn bản DANCE.INP
 Dòng 1 chứa hai số nguyên dương 𝑚, 𝑛 ≤ 105
 Dòng 2 chứa 𝑚 số nguyên dương 𝑎1 , 𝑎2 , … , 𝑎𝑚 (∀𝑖: 𝑎𝑖 ≤ 109 )
 Dòng 3 chứa 𝑛 số nguyên dương 𝑏1 , 𝑏2 , … , 𝑏𝑛 (∀𝑗: 𝑏𝑗 ≤ 109 )
Các số trên một dòng được ghi cách nhau ít nhất một dấu cách
Kết quả: Ghi ra tệp văn bản DANCE.OUT một số nguyên duy nhất là số cặp nhảy
theo phương án tìm được
Ví dụ
DANCE.INP DANCE.OUT
32 1
123
23
45 3
1234
22145
Chú ý: Ít nhất 50% số điểm ứng với các test có 𝑚, 𝑛 ≤ 1000
Bài 4: Hình vuông
Đề bài:
Trên mặt phẳng với hệ tọa độ Descartes vuông góc Ο𝑥𝑦 cho 𝑛 điểm. Hãy tìm hình
vuông nhỏ nhất có cạnh song song với một trong hai trục tọa độ chứa tất cả 𝑛 điểm đã cho
(điểm nằm trên cạnh hình vuông cũng bị tính là chứa trong hình vuông)
Dữ liệu: Vào từ tệp văn bản SQUARE.INP:
 Dòng 1 chứa số nguyên dương 𝑛 ≤ 105
 𝑛 dòng tiếp theo, dòng thứ 𝑖 chứa hai số nguyên 𝑥𝑖 , 𝑦𝑖 là tọa độ của một điểm
(𝑥𝑖 , 𝑦𝑖 ), ∀𝑖: |𝑥𝑖 |, |𝑦𝑖 | ≤ 109
Kết quả: Ghi ra tệp văn bản SQUARE.OUT một số
7
nguyên duy nhất là diện tích hình vuông tìm được
6
Ví dụ
5
SQUARE.INP SQUARE.OUT
4
3 16 3
34 2
57 1
43
0 1 2 3 4 5 6 7
Bài 5: Running
Đề bài:
Sau nhiều ngày học căng thẳng, thầy giáo quyết định cho 𝑁 bạn học sinh lớp Tin thi
chạy với khoảng cách là 100m. Vì phải bấm giờ nên thầy đã nhờ một bạn ghi lại điểm thi
chạy của 𝑁 bạn học sinh. Thầy có xem qua bảng ghi điểm và nhận thấy Minh là người về nhì.
Thật không may, do sơ suất nên thầy đã làm đổ cốc trà đá lên tờ giấy ghi điểm làm nhòe hết
phần kết quả. Thầy chỉ còn danh sách gồm 𝑁 bạn học sinh và số điểm của các bạn. Hãy giúp
thầy tìm ra điểm Minh và hai bạn có thời gian chạy cao nhất để trao thưởng.
Dữ liệu:
 Dòng đầu tiên chứa số nguyên dương 𝑁 (𝑁 ≥ 2) là số bạn học sinh tham gia chạy.
 Dòng thứ hai chứa 𝑁 số nguyên lần lượt là điểm thi chạy của 𝑁 bạn (thứ tự theo số
hiệu của các bạn từ 1 đến 𝑁).
Kết quả:
 Dòng đầu tiên xuất ra điểm của Minh, nếu không thể xác nhận được thì xuất ra "-
1".
 Dòng thứ hai ghi số hiệu của hai bạn có điểm cao nhất
Running.inp Running.out
6 4
153344 25
5 -1
11111 12
10 4
10 3 3 3 4 10 3 4 10 3 16
Bài 6: Stamps
Đề bài:
Mọi người đều ghét Raymond. Anh ta là nhà sưu tầm tem lớn nhất trên thế giới và vì
lẽ đó anh ta thường chế diễu tất cả các nhà sưu tầm tem khác. May thay, mọi người đều yêu
Lucy và cô ta có một kế hoạch. Cô ấy bí mật hỏi bạn bè cho cô ấy mượn tem, để cô ấy có thể
làm cho Raymond xấu hổ bằng cách chứng tỏ bộ sưu tầm tem của mình còn lớn hơn bộ sưu
tầm tem của anh ta.
Raymond rất tin tưởng vào sự tốt nhất của bộ tem của mình, cho nên anh ta luôn nói
cho mọi người biết anh ta sẽ trưng bày bao nhiêu con tem. Lucy biết mình có bao nhiêu con
tem và cô ta biết rằng mình cần bao nhiêu con tem nữa. Cô ấy cũng biết có bao nhiêu người
bạn sẽ cho cô mượn tem và mỗi người sẽ cho mượn bao nhiêu. Nhưng cô ấy muốn mượn từ
một số người bạn ít nhất có thể. Bạn hãy viết chương trình, tính giúp cô ấy cần mượn tem từ
ít nhất bao nhiêu người bạn.
Dữ liệu:
 Dòng đầu tiên của tệp vào chứa hai số nguyên s và n ngăn cách nhau bởi một dấu
cách, ở đó s là số con tem tối thiểu mà Lucy cần mượn (1 <= s <= 1.000.000) và n
là số người bạn sẽ cho Lucy mượn tem (1 <= n <= 10.000).
 Dòng thứ hai chứa n số nguyên là số tem mà mỗi người bạn sẽ cho Lucy mượn (các
số nằm trong phạm vi từ 1 đến 10.000).
Kết quả: Ghi ra tệp ra một số duy nhất là số người bạn ít nhất mà Lucy cần mượn tem.
Trong trường hợp Lucy không mượn được số tem tối thiểu mình cần thì ghi ra tệp ra dòng
thông báo “impossible”.
Ví dụ:
stamps.inp stamps.out
100 6 3
13 17 42 9 23 57
99 6 2
13 17 42 9 23 57
1000 3 impossible
314 159 265
Bài 7: BuyGifts (Mua quà)
Đề bài:
Tý là một học sinh tham dự cuộc thi Olympic Tin học quốc tế năm 2014. Do lần đầu
ra nước ngoài nên bạn ấy muốn mua các món quà lưu niệm tặng các bạn ở trường. Sau những
buổi thi căng thẳng, ban tổ chức dẫn các thí sinh dự thi đi tham quan danh lam thắng cảnh và
những cửa hàng lưu niệm của địa phương.
Sau khi đi lòng vòng Tý bước vào một cửa hàng lưu niệm bán những món quà mà bạn
ấy yêu thích. Chủ cửa hàng giới thiệu cho Tý n ( 3 <= n <=105 ) món quà, món
Quà thứ i (1<=i<=n) có giá ai , (1<= ai <= 109) .
Tý muốn chọn mua m (1 <= m <= n ) món quà sao cho độ chênh lệch giữa giá món
quà rẻ nhất và đắt nhất là tối thiểu. Vì đi chơi nên Tý không mang theo máy tính nên bạn hãy
giúp bạn ấy tính xem có thể mua các món quà với độ chênh lệch nhỏ nhất.
Dữ liệu: từ tệp văn bản BUYGIFTS.INP có cấu trúc như sau:
 Dòng 1: ghi hai số nguyên dương n và m.
 Dòng 2: Ghi ghi n số nguyên lần lượt là a1,a2,L, an.
 Các số trên cùng một dòng cách nhau một dấu cách
Kết quả: ghi ra tệp BUYGIFTS.OUT gồm một số nguyên dương là độ lệch tối thiểu.
Ví dụ:
BUYGIFTS.INP BUYGIFTS.INP Giải thích
64 5 Tý có thể mua các món quà có giá trị:
10 12 10 5 7 22 10, 12, 10, 7.

Bài 8: Tham quan


Đề bài:
Trong đợt tổ chức đi tham quan danh lam thắng cảnh của thành phố Hồ Chí Minh, Ban
tổ chức hội thi Tin học trẻ tổ chức cho N đoàn (đánh số từ 1 đến N) mỗi đoàn đi tham quan
một địa điểm khác nhau. Đoàn thứ i đi tham quan địa điểm cách Khách sạn Hoàng Đế di km
(i=1,2,...,n). Hội thi có M xe taxi đánh số từ 1 đến M (MN). Xe thứ j có mức tiêu thụ xăng
là v lít/km.
Yêu cầu: Hãy chọn N xe để phục vụ việc đưa các đoàn đi tham quan sao cho tổng chi
phí xăng cần sử dụng là ít nhất.
Dữ liệu: Vào từ tệp văn bản THAMQUAN.INP
 Dòng đầu tiên chứa hai số nguyên dương N, M (1N,M30000)
 Tiếp theo là N dòng, dòng thứ i ghi số nguyên di (1di30000)
 Cuối cùng là M dòng, dòng thứ j ghi vj (1vj30000)
Kết quả: Ghi ra tệp văn bản THAMQUAN.OUT:
 Dòng đầu tiên ghi tổng lượng xăng cần dùng cho việc đưa các đoàn đi tham quan
(không tính lượt về)
 Dòng thứ i trong số N dòng tiếp theo ghi chỉ số xe phục vụ đoàn i (i=1,2,...,N)
Ví dụ:
THAMQUAN.INP THAMQUAN.OUT
34 256
7 2
5 3
9 4
17
13
15
10
Bài 9: Tổng đoạn thẳng
Đề bài:
Cho n (n ≤ 10000) đoạn thẳng trên trục số với các điểm đầu xi và độ dài di (|xi|, di là
những số nguyên không vượt quá 109). Tính tổng độ dài trên trục số bị phủ bởi n đoạn trên.
Ví dụ: Có 3 đoạn x1=-5, d1=10; x2=0, d2=6; x3=-100, d3=10 thì tổng độ dài trên trục số
bị phủ bởi 3 đoạn trên là 21.
Dữ liệu: từ tệp văn bản TONGDD.INP có cấu trúc như sau:
 Dòng 1: chứa số nguyên dương n (1≤n ≤ 10000).
 Dòng thứ i trong n dòng tiếp theo ghi tọa độ điểm đầu và độ dài của đoạn thẳng thứ i
(các số cách nhau một dấu cách)
Kết quả: Ghi ra tệp văn bản TONGDD.OUT: ghi tổng độ dài trên trục số bị phủ bởi n
đoạn thẳng đã cho.
Ví dụ:
TONGDD.INP TONGDD.OUT
3 21
-5 10
06
-100 10

Bài 9: Tổng đoạn thẳng


Đề bài:
Cho n (n ≤ 10000) đoạn thẳng trên trục số với các điểm đầu xi và độ dài di (|xi|, di là
những số nguyên không vượt quá 109). Tính tổng độ dài trên trục số bị phủ bởi n đoạn trên.
Ví dụ: Có 3 đoạn x1=-5, d1=10; x2=0, d2=6; x3=-100, d3=10 thì tổng độ dài trên trục số
bị phủ bởi 3 đoạn trên là 21.
Dữ liệu: từ tệp văn bản TONGDD.INP có cấu trúc như sau:
 Dòng 1: chứa số nguyên dương n (1≤n ≤ 10000).
 Dòng thứ i trong n dòng tiếp theo ghi tọa độ điểm đầu và độ dài của đoạn thẳng thứ i
(các số cách nhau một dấu cách)
Kết quả: Ghi ra tệp văn bản TONGDD.OUT: ghi tổng độ dài trên trục số bị phủ bởi n
đoạn thẳng đã cho.
Ví dụ:
TONGDD.INP TONGDD.OUT
3 21
-5 10
06
-100 10
Bài 10: Numjoin (Ghép số)
Đề bài:
Cho n số nguyên dương a1, a2, …, an (1 < n ≤ 100), mỗi số không vượt quá 109. Từ các
số này, người ta tạo ra một số nguyên mới bằng cách ghép tất cả các số đã cho, tức là viết liên
tiếp các số đã cho với nhau. Ví dụ, với n = 4 và các số 123, 124, 56, 90 ta có thể tạo ra các số
mới sau: 1231245690, 1241235690, 5612312490, … Có thể dễ dàng thấy rằng, với n = 4, ta
có thể tạo ra 24 số mới. Trong trường hợp này, số lớn nhất có thể tạo ra là 9056124123.
Yêu cầu: Cho n và các số a1, a2, …, an. Hãy xác định số lớn nhất có thể tạo ra khi ghép
các số đã cho thành một số mới.
Dữ liệu: Tệp văn bản NUMJOIN.INP có dạng:
 Dòng thứ nhất chứa số nguyên n;
 Dòng thứ hai chứa n số nguyên a1, a2, …, an.
Kết quả: Tệp văn bản NUMJOIN.OUT gồm một dòng là số lớn nhất có thể tạo ra khi
ghép các số đã cho thành một số mới.
Ví dụ:
NUMJOIN.INP NUMJOIN.OUT
4 9056124123
123 124 56 90
Bài 11: Sumzero (Tổng bằng 0)
Đề bài:
Cho dãy gồm N (N ≤ 10000) số a1, a2, …, an. Hãy tìm dãy con liên tiếp dài nhất có
tổng bằng 0 (|ai| ≤ 109)
Ví dụ, dãy gồm 5 số 2, 1, -2, 3, -2 thì dãy con liên tiếp dài nhất có tổng bằng 0 là: 1, -
2, 3, -2
Dữ liệu: Tệp SUMZERO.INP có dạng
 Dòng đầu là số nguyên N
 Dòng tiếp theo gồm N số cách nhau bởi dấu cách.
Kết quả: Tệp SUMZERO.OUT chứa các số có tổng bằng 0 cần tìm. Nếu không tìm
thấy ghi -1.
Ví dụ:
SUMZERO.INP SUMZERO.OUT
5 1 -2 3 -2
2 1 -2 3 -2
Bài 12: DSN (Dãy số)
Đề bài:
Cho N (N ≤ 10000) đoạn số nguyên [ai, bi] (|ai|, |bi| ≤ 109), hãy tìm một số mà số đó
thuộc nhiều đoạn số nguyên nhất.
Ví dụ, có 5 đoạn [0,10], [2,3], [4,7], [3,5], [5,8], ta chọn số 5 thuộc 4 đoạn [0,10], [4,7],
[3,5], [5,8].
Dữ liệu: Tệp DSN.INP có dạng
 Dòng đầu là số nguyên N
 N dòng tiếp theo, mỗi dòng i ghi hai số nguyên ai và bi
Kết quả: Tệp DSN.OUT chứa số thuộc nhiều đoạn số nguyên nhất.
Ví dụ:
DSN.INP DSN.OUT
5 5
0 10
23
47
35
58
Bài 13: Aggressive cows (Nhốt bò)
Đề bài:
Nông dân John có một trang trại với N cái cọc. Các cọc này được đặt trên một đường
thẳng ở các vị trí x1, x2, …, xn.
Trang trại này có C con bò. Những con bò này không thích những chiếc cọc cho lắm.
Chúng trở nên hung dữ khi bị buộc vào những chiếc cọc. Để tránh việc các con bò làm đau
nhau, nông dân John muốn đặt mỗi con bò vào một cái cọc, sao cho khoảng cách nhỏ nhất
giữa hai con bò bất kì là lớn nhất. Hãy tìm giá trị lớn nhất này.
Dữ liệu:
 Dòng đầu tiên gồm hai số nguyên dương N và C (2 ≤ C ≤ N ≤ 100000).
 N dòng tiếp theo, mỗi dòng chứa một số nguyên xi mô tả vị trí của một cây cọc (0
≤ xi ≤ 109).
Kết quả: In ra giá trị lớn nhất của khoảng cách nhỏ nhất giữa hai con bò bất kì.
Ví dụ:
Aggressivecows.inp Aggressivecows.out
53 3
1
2
8
4
9
Giải thích ví dụ: Nông dân John có thể đặt các con bò vào các vị trí 1, 4 và 8, khi đó,
khoảng cách bé nhất giữa hai con bò bất kì là 3.
Bài 14: Wedding (Dự tiệc)
Đề bài:
HD chuẩn bị tổ chức một bữa tiệc tại nhà. Tại nhà mình, HD có n chiếc thìa và m chiếc
dĩa. HD muốn sắp xếp thìa và dĩa sao cho thật đẹp, theo HD cách bố trí đẹp là thìa ở giữa, bên
trái là chiếc dĩa có độ dài nhỏ hơn, bên phải là chiếc dĩa có độ dài lớn hơn.
Yêu cầu: Hãy cho biết HD có thể mời tối đa được bao nhiêu khách, biết rằng mỗi
người khách sẽ sử dụng 1 bộ thìa và 2 dĩa ở 2 bên?
Dữ liệu: WEDDING.INP
 Dòng 1: N và M
 Dòng 2: N số nguyên а1, а2… аn là độ dài của n chiếc thìa.
 Dòng 3: M số nguyên b1, b2, … bm là độ dài của m chiếc dĩa.
Kết quả: WEDDING.OUT
 1 số duy nhất là số khách tối đa HD có thể mời dự tiệc.
Hạn chế:
1 ≤ 𝑁, 𝑀 ≤ 100.000
0 ≤ 𝑎𝑖 , 𝑏𝑗 ≤ 1.000.000.000
Ví dụ:
WEDDING.INP WEDDING.OUT
44 2
3413
2170

You might also like