You are on page 1of 5

CÁC BÀI TOÁN SẮP XẾP

Bài 1: Thăm quan thắng cảnh [visit1.cpp]


Trong đợt tổ chức đi tham quan danh lam thắng cảnh của thành phố Lao Cai,
Ban tổ chức cho N đoàn (đánh số từ 1 đến N) mỗi đoàn đi 1 địa điểm khác nhau. Đoàn
thứ i đi thăm địa điểm cách khách sạn A là di km (i = 1,2,3,..,N). Ban tổ chức có M xe
taxi đánh số từ 1 đến M (M ≥ N) để phục vụ cho việc đưa các đoàn đi tham quan. Xe
thứ j có mức tiêu thụ xăng là V j đơn vị thể tích/1 km.

Yêu cầu:
Hãy chọn N xe để phục vụ việc đưa các đoàn đi tham quan, mỗi xe chỉ phục vụ
một đoàn sao cho tổng chi phí xăng cần sử dụng là ít nhất.
Dữ liệu vào: File văn bản VISIT1.INP.
- Dòng đầu tiên chứa hai số nguyên dương N, M ( N ≤ M ≤ 105 ).
- Dòng thứ 2 chứa các số nguyên dương d1 , d 2 , d 3  , d N
- Dòng thứ 2 chứa các số nguyên dương v1 , v 2 , v3  , v M
(Các số trên cùng một dòng được ghi cách nhau ít nhất một khoảng trống).
Kết quả: Ghi ra file VISIT1.OUT
Ghi tổng lượng xăng dầu ít nhất cần dùng cho việc đưa các đoàn tham
quan (không tính lượt về).
Ví dụ:

VISIT1.INP VISIT1.OUT
3 4 256
7 5 9 312
17 13 15 10 423
4 4 10
2311 2134
1213 1324
4 4 4
1111 1234
1111 1234

- Có 50% test với n≤103


Bài 2: Bắt tay
Trong giờ đợt tập quân sự đầu năm của trường THPT chuyên Lào Cai, các thầy
cô dạy môn Giáo dục quốc phòng cho các bạn học sinh xếp thành hai hàng song song
và quay mặt vào nhau: Hàng thứ nhất có N học sinh, mỗi học sinh có chiều cao là
𝑎1 , 𝑎2 , … 𝑎𝑛 (𝑁 ≤ 106 ) 0 < 𝑎𝑖 ≤ 106 . Hàng học sinh thứ 2 có M học sinh, chiều cao của
mỗi học sinh tương ứng là 𝑏1 , 𝑏2 , … 𝑏𝑚 (𝑀 ≤ 106 ) 0 < 𝑏𝑖 ≤ 106 . Tất cả các bạn đều
nhớ chính xác chiều cao của mình. Các thầy cô tổ chức cho hai hàng học sinh này bắt
tay nhau theo nguyên tắc là các bạn ở hàng thứ nhất phải cao hơn bạn ở hàng thứ hai
thì mới được bắt tay nhau, mỗi bạn chỉ được bắt tay một lần. Bạn hãy viết chương
trình đếm số cái bắt tay.
Dữ liệu vào: Từ tệp BAI01.INP
- Dòng đầu tiên là 2 số nguyên N, M
- Dòng thứ 2 là dãy A: 𝑎1 , 𝑎2 , … 𝑎𝑛 (𝑁 ≤ 106 )
- Dòng thứ 3 là dãy B: 𝑏1 , 𝑏2 , … 𝑏𝑛 (𝑀 ≤ 106 )
Dữ liệu ra: Ghi ra tệp BAI01.OUT là số cái bắt tay.
Ví dụ:
BAI01.INP BAI01.OUT Giải thích
56 4 Có các cặp (a2,b1),
13467 (a3,b2),(a4,b3),(a5,b4)
233568
88 7
74286424
37212714
Ràng buộc:
- Có 75% số điểm với 𝑵, 𝑴 ≤ 𝟏𝟎𝟑 .
- Có 25% số điểm còn lại không có điều kiện gì thêm.
Bài 2: Mua hàng
Tý là học sinh chuyên Tin rất thông minh nhưng lại có tính ẩu đoảng và không
chịu để ý mọi việc. Một hôm Tý được mẹ giao cho nhiệm vụ đi siêu thị mua cho mẹ
một số sản phẩm, những sản phẩm này có mã là một số nguyên dương ghi trên bao
bì. Trước khi mẹ Tý đi làm mẹ đã đưa cho Tý một mảnh giấy có ghi các mã sản phẩm
cần mua. Khi ra đến siêu thị thì Tý phát hiện bỏ quên tờ giấy mẹ đưa ở nhà, nhưng Tý
rất sợ về bị mẹ mắng thế nên Tý đã tự ý mua theo ý của mình. Khi về đến nhà Tý đã
phát hiện những sản phẩm mình mua không đúng như trong tờ giấy mẹ ghi. Khi đi
làm về mẹ yêu cầu Tý đi trả lại những sản phẩm không đúng so với danh sách mà mẹ
Tý đã đưa ban đầu.
Bạn hãy viết một chương trình giúp bạn Tý đếm xem mình phải trả lại bao
nhiêu sản phẩm. Biết rằng danh sách sản phẩm mà mẹ Tý yêu cầu mua là dãy số
𝑎1 , 𝑎2 , … 𝑎𝑛 (𝑁 ≤ 106 ) 0 < 𝑎𝑖 ≤ 106 . Và những sản phẩm mà bạn Tý mua về có mã là
dãy số 𝑏1 , 𝑏2 , … 𝑏𝑚 (𝑀 ≤ 106 ) 0 < 𝑏𝑖 ≤ 106

Dữ liệu vào: Từ tệp BAI02.INP


- Dòng đầu tiên là 2 số nguyên lần lượt là N, M
- Dòng thứ 2 là dãy A: 𝑎1 , 𝑎2 , … 𝑎𝑛 (𝑁 ≤ 106 )
- Dòng thứ 3 là dãy B: 𝑏1 , 𝑏2 , … 𝑏𝑛 (𝑀 ≤ 106 )
Dữ liệu ra: Ghi ra tệp BAI02.OUT là số mặt hàng mà Tý phải trả lại.
Ví dụ:
BAI02.INP BAI02.OUT Giải thích
65 4 Tý mua 5 sản phẩm, chỉ sản
384296 phẩm có mã 9 là đúng nên Tý
19115 phải trả lại 4 sản phẩm là 1 1
15
56 4 Tý mua 6 sản phẩm, chỉ đúng
59919 sản phẩm có mã 5, 9 là đúng
352529 nên Tý phải trả lại 4 sản
phẩm: 3 2 5 2
52 2 Tý mua 2 sản phẩm, không
23224 đúng sản phẩm nào nên phải
57 trả lại 2 sản phẩm.

Ràng buộc:
- Có 75% số điểm với 𝑵, 𝑴 ≤ 𝟏𝟎𝟑 .
- Có 25% số điểm còn lại không có điều kiện gì thêm.

Bài 4. KHIÊU VŨ
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ừ file 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 file 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
Chú ý: Ít nhất 50% số điểm ứng với các test có 𝑚, 𝑛 ≤ 1000

Bài 5: Tập xe
Cô giáo trường tiểu học Sông Đà đang dạy n học sinh tập xe đạp, các học sinh
được đánh số từ 1 tới n, học sinh thứ i có trọng lượng là ai. Có một xe đạp duy nhất
với tải trọng là m, hai học sinh chỉ có thể cùng lên xe nếu tổng trọng lượng của hai học
sinh không vượt quá m.
Cô giáo tự hỏi có bao nhiêu cách chọn hai học sinh khác nhau cho cùng lên xe,
sau nhiều giờ tính toán không có kết quả, cô quyết định hỏi các chuyên gia lập trình
CSP (Counting Student Pairs) về đáp số.
Yêu cầu: Đếm số cặp chỉ số i, j trong đó i < j và ai + aj ≤ m
Dữ liệu vào: là tệp BAI03.INP

- Dòng 1 chứa hai số nguyên dương n ≤ 106, m ≤ 106


- Dòng 2 chứa n số nguyên dương a1, a2, … , an (∀i: ai ≤ 106)
Các số trên một dòng của input file được ghi cách nhau bởi dấu cách
Kết quả: là tệp BAI03.OUT
- Ghi một số nguyên duy nhất là đáp số của bài.
Ví dụ
BAI03.INP BAI03.OUT
56 6
12345

Ràng buộc:

- Có 70% số test tương ứng 70% số điểm có 1 ≤ n ≤ 104, 1 ≤ m ≤ 104, ai ≤ 104


- Có 30% test tương ứng 30% số điểm có 104 ≤ n ≤ 106, 104 ≤ m ≤ 106, ai ≤ 106

Bài 6: Mixing Milk


File vào: milk.inp
File ra: milk.out Giới hạn thời gian: 1 giây
File chương milk.* Giới hạn bộ nhớ: 64 KB
trình:
Vì việc đóng gói sữa là một nghề kinh doanh có lợi nhuận thấp, cho nên việc mua sữa
tươi về đóng gói ở mức giá thấp nhất có thể là rất quan trọng.
Công ty Merry Milk Makers có một số nông dân chuyên cung cấp sữa và mỗi người có
một giá bán khác nhau cho công ty. Tuy nhiên vì mỗi con bò chỉ có thể cho một lượng
sữa nhất định mỗi ngày nên những người nông dân đó cũng chỉ có một lượng sữa nhất
định để bán mỗi ngày. Mỗi ngày, công ty có thể mua một số nguyên lít sữa từ mỗi
người nông dân, ít hơn hoặc bằng giới hạn sữa của mỗi người nông dân đó.
Cho trước nhu cầu mua sữa mỗi ngày của công ty, giá mỗi lít sữa và số lít sữa có sẵn
của mỗi người nông dân. Hãy tính số tiền ít nhất mà công ty cần để mua lượng sữa
yêu cầu. Giả thiết rằng tổng số sữa của các người nông dân đủ để đáp ứng lượng sữa
của công ty.
Dữ liệu: Dòng đầu tiên của file vào chứa hai số nguyên N và M ngăn cách nhau bởi
một dấu cách. N 0  N  2 000 000) là số lít sữa mà công ty cần mỗi ngày, M
(0  M  5 000) là số người nông dân cung cấp sữa cho công ty. Dòng thứ i trong số M
dòng tiếp theo, chứa hai số nguyên Pi và Ai ngăn cách nhau bởi một dấu cách. Pi
(0  Pi  1 000) là giá một lít sữa của bác nông dân i, Ai (0  Ai  2 000 000) là số lít sữa
tối đa mà bác nông dân có thể bán cho công ty mỗi ngày.
Kết quả: File ra gồm một dòng chứa đúng một số nguyên là số tiền nhỏ nhất mà công
ty Merry Milk Makers có thể mua sữa mỗi ngày.

Ví dụ:
milk.in milk.out
100 5 630
5 20
9 40
3 10
8 80
6 30

You might also like