| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2011 - Apples | 100 (p) | 4.0s | 256M |
| 2 | JOI 2011 - Bookshelf | 100 (p) | 1.0s | 64M |
| 3 | JOI 2011 - IOI | 100 (p) | 1.0s | 64M |
| 4 | JOI 2011 - Orienteering | 100 (p) | 1.0s | 64M |
Trang trại JOI nhập và xuất táo. Táo được nhập từng quả một. Khi có yêu cầu xuất hàng, trang trại phải xử lý ngay, không đợi lần nhập táo tiếp theo. Mỗi yêu cầu xuất hàng chỉ định số táo cần xuất. Nếu có thể chọn đúng số táo đó theo quy định của trang trại, trang trại lập tức xuất những quả táo đã chọn. Nếu không thể, trang trại thông báo rằng không thể xuất hàng và không xuất quả táo nào.
Năm nay, trang trại JOI dự kiến sẽ nhập rất nhiều táo và nhận rất nhiều yêu cầu xuất hàng. Bạn được nhờ viết chương trình quản lý táo cho trang trại.
Mỗi quả táo có một độ đậm màu là số nguyên. Độ chênh lệch màu của một lần xuất hàng là hiệu giữa độ đậm màu lớn nhất và nhỏ nhất trong số táo được xuất. Quy định của trang trại yêu cầu độ chênh lệch này không vượt quá \(B\).
Chương trình nhận tổng cộng \(M\) yêu cầu. Yêu cầu thứ \(i\) thuộc một trong ba loại sau:
NO. Khi có nhiều cách chọn hợp lệ, phải chọn cách có tổng độ đậm màu lớn nhất. Những quả đã xuất không còn ở trang trại.Đây là bài tương tác (Reactive task) qua đầu vào chuẩn và đầu ra chuẩn. Nếu yêu cầu thứ \(i\) là yêu cầu xuất hàng, dữ liệu của yêu cầu thứ \(i+1\) chỉ được cung cấp sau khi chương trình đã xuất câu trả lời cho yêu cầu thứ \(i\).
Cần bảo đảm dữ liệu xuất không bị giữ trong bộ đệm, khiến thao tác đọc tiếp theo bị chặn. Gọi fflush(stdout); hoặc thực hiện thao tác tương đương trước khi đọc dữ liệu tiếp theo.
Đọc dữ liệu từ đầu vào chuẩn theo giao thức trên:
A D_i, trong đó \(D_i\) là độ đậm màu của quả táo vừa nhập. Yêu cầu xuất hàng có dạng R N_i, trong đó \(N_i\) là số táo cần xuất. Chữ cái và số nguyên được ngăn cách bằng một dấu cách.E, là yêu cầu kết thúc chương trình. Lệnh này được tính trong tổng số \(M\) yêu cầu.Mỗi khi nhận yêu cầu xuất hàng, nếu không thể đáp ứng thì in một dòng chứa NO. Nếu có thể, in một dòng chứa độ đậm màu của tất cả các quả táo được xuất theo thứ tự tăng dần, cách nhau bởi dấu cách. Phải chọn cách xuất có tổng độ đậm màu lớn nhất trong các cách đáp ứng quy định.
Giới hạn của kỳ thi gốc: thời gian CPU \(4\) giây, bộ nhớ \(256\) MB. Riêng bài này, thời gian được tính bằng tổng thời gian chạy của chương trình thí sinh và chương trình chấm. Nếu chương trình thí sinh sử dụng từ \(1\) giây trở lên, bài nộp có thể bị quá thời gian.
Theo thông tin kỹ thuật của kỳ thi gốc, chương trình phải kết thúc bình thường với mã trả về \(0\). Một bộ dữ liệu chỉ được tính điểm khi chương trình đáp ứng giới hạn thời gian, bộ nhớ và cho kết quả đúng. Giới hạn ngăn xếp mặc định là \(8\) MB; cần tránh tràn ngăn xếp khi dùng đệ quy.
Khi cần xử lý số nguyên không vừa kiểu \(32\) bit, hãy dùng kiểu số nguyên \(64\) bit, chẳng hạn long long trong C/C++, với định dạng %lld cho scanf và printf. Với lượng dữ liệu vào/ra lớn, tài liệu kỹ thuật khuyến nghị dùng scanf/printf thay cho cin/cout để tránh chi phí vào/ra quá lớn.
Bài có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.
Bảng sau giữ thứ tự nhận dữ liệu và xuất câu trả lời trong ví dụ. Cột Dữ liệu vào là dữ liệu hệ thống gửi cho chương trình; cột Dữ liệu ra là câu trả lời của chương trình. Ô trống nghĩa là không có dữ liệu ở phía đó trong bước tương ứng.
| Dữ liệu vào | Dữ liệu ra |
|---|---|
22 10 |
|
A 5 |
|
A 16 |
|
R 2 |
|
NO |
|
A 10 |
|
R 2 |
|
10 16 |
|
R 2 |
|
NO |
|
A 15 |
|
A 5 |
|
R 2 |
|
5 15 |
|
A 5 |
|
R 2 |
|
5 5 |
|
A 0 |
|
A 10 |
|
R 1 |
|
10 |
|
A 10 |
|
A 10 |
|
R 4 |
|
NO |
|
A 30 |
|
R 4 |
|
NO |
|
A 0 |
|
R 4 |
|
0 0 10 10 |
|
E |
Năm 20XX, IOI sẽ được tổ chức tại đất nước nơi JOI sinh sống. Nghe tin này, JOI vội lao ra khỏi phòng để báo cho bạn bè. Vì quá hấp tấp, cậu va vào giá sách khiến toàn bộ sách rơi xuống. Đang rất vội, cậu nhặt tất cả sách đặt lại lên giá mà không quan tâm đến thứ tự rồi ra khỏi nhà. Khi trở về, JOI phải sắp xếp những cuốn sách đang lộn xộn về thứ tự ban đầu.
Giá sách trong phòng JOI rộng \(N\) xentimét, chứa \(N\) cuốn sách, mỗi cuốn rộng \(1\) xentimét. Các cuốn sách được đánh số từ \(1\) đến \(N\) và ban đầu được xếp từ trái sang phải theo thứ tự \(1,\ldots,N\). Cuốn sách \(i\) nặng \(A_i\) gam.
JOI đang mệt và không muốn cầm nhiều sách cùng lúc, nên cậu quyết định sắp xếp giá sách bằng cách lặp lại thao tác sau:
Không được lấy từ hai cuốn sách trở lên ra khỏi giá cùng một lúc.
Ví dụ, nếu sách đang được xếp từ trái sang phải theo thứ tự \(5,3,4,1,2\), JOI có thể lấy cuốn \(1\) ra, lần lượt dịch cuốn \(4\) rồi cuốn \(3\) sang phải và đặt cuốn \(1\) lại lên giá. Khi đó thứ tự sách từ trái sang phải trở thành \(5,1,3,4,2\), như hình dưới.
Khi lấy một cuốn sách nặng \(w\) gam ra khỏi giá, JOI tiêu hao đúng \(w\) calo. Khi đặt cuốn sách nặng \(w\) gam trở lại giá, cậu cũng tiêu hao đúng \(w\) calo. Giá sách được làm bằng vật liệu nhẵn, nên có thể coi việc dịch chuyển sách trong giá không tiêu hao calo.
Vì đang mệt, JOI muốn đưa sách về thứ tự ban đầu với lượng calo tiêu hao ít nhất.
Cho số cuốn sách, khối lượng của từng cuốn và thứ tự hiện tại trên giá, hãy tính tổng số calo ít nhất mà JOI cần tiêu hao để đưa sách về thứ tự ban đầu.
Đọc từ đầu vào chuẩn:
In ra đầu ra chuẩn một dòng chứa số nguyên là tổng số calo ít nhất mà JOI phải tiêu hao.
Giới hạn của kỳ thi gốc: thời gian CPU \(1\) giây, bộ nhớ \(64\) MB.
Theo thông tin kỹ thuật của kỳ thi gốc, chương trình phải kết thúc bình thường với mã trả về \(0\). Một bộ dữ liệu chỉ được tính điểm khi chương trình đáp ứng giới hạn thời gian, bộ nhớ và cho kết quả đúng. Giới hạn ngăn xếp mặc định là \(8\) MB; cần tránh tràn ngăn xếp khi dùng đệ quy.
Khi cần xử lý số nguyên không vừa kiểu \(32\) bit, hãy dùng kiểu số nguyên \(64\) bit, chẳng hạn long long trong C/C++, với định dạng %lld cho scanf và printf. Với lượng dữ liệu vào/ra lớn, tài liệu kỹ thuật khuyến nghị dùng scanf/printf thay cho cin/cout để tránh chi phí vào/ra quá lớn.
Bài có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm. Các tỷ lệ dưới đây mô tả các tập dữ liệu có phần giao nhau:
Ví dụ 1
4
1
6
4
3
3
4
2
1
14
Ban đầu sách được xếp từ trái sang phải theo thứ tự \(3,4,2,1\). Các cuốn \(1,2,3,4\) lần lượt nặng \(1,6,4,3\) gam.
Trước tiên, JOI thực hiện lần lượt:
Sách trở thành thứ tự \(1,3,4,2\). Cuốn \(1\) nặng \(1\) gam nên JOI tiêu hao \(1\times2=2\) calo.
Tiếp theo, JOI thực hiện lần lượt:
Sách trở thành thứ tự \(1,2,3,4\). Cuốn \(2\) nặng \(6\) gam nên JOI tiêu hao \(6\times2=12\) calo.
Như vậy, JOI có thể đưa sách về thứ tự \(1,2,3,4\) với tổng cộng \(14\) calo. Không thể thực hiện với lượng calo ít hơn.
Năm 20XX, IOI cuối cùng cũng được tổ chức tại nước JOI. Có \(K\) thí sinh tham gia, được đánh số từ \(1\) đến \(K\). Kỳ thi có tổng cộng \(N\) bài; ở mỗi bài, mỗi thí sinh nhận một số điểm nguyên từ \(0\) đến \(100\).
Huy chương được trao dựa trên tổng điểm của \(N\) bài. Cụ thể, quy tắc trao huy chương vàng như sau: gọi \(G\) là giá trị lớn nhất sao cho số thí sinh có tổng điểm ít nhất \(G\) chiếm ít nhất \(\frac{1}{12}\) tổng số thí sinh. Một thí sinh nhận huy chương vàng khi và chỉ khi tổng điểm của mình trong \(N\) bài ít nhất là \(G\).
Hiện tại đã thi xong \(M\) bài và điểm của các bài này đã được xác định. Khi xem tổng điểm hiện tại của mỗi thí sinh trên trang web IOI, bạn muốn biết ai chắc chắn nhận huy chương vàng và ai còn có khả năng nhận huy chương vàng.
Cho tổng điểm hiện tại của từng thí sinh, hãy liệt kê theo thứ tự số hiệu tăng dần những thí sinh chắc chắn nhận huy chương vàng, rồi những thí sinh có khả năng nhận huy chương vàng.
Đọc từ đầu vào chuẩn:
In ra đầu ra chuẩn theo định dạng sau:
--------, gồm đúng tám dấu gạch nối.Giới hạn của kỳ thi gốc: thời gian CPU \(1\) giây, bộ nhớ \(64\) MB.
Theo thông tin kỹ thuật của kỳ thi gốc, chương trình phải kết thúc bình thường với mã trả về \(0\). Một bộ dữ liệu chỉ được tính điểm khi chương trình đáp ứng giới hạn thời gian, bộ nhớ và cho kết quả đúng. Giới hạn ngăn xếp mặc định là \(8\) MB; cần tránh tràn ngăn xếp khi dùng đệ quy.
Khi cần xử lý số nguyên không vừa kiểu \(32\) bit, hãy dùng kiểu số nguyên \(64\) bit, chẳng hạn long long trong C/C++, với định dạng %lld cho scanf và printf. Với lượng dữ liệu vào/ra lớn, tài liệu kỹ thuật khuyến nghị dùng scanf/printf thay cho cin/cout để tránh chi phí vào/ra quá lớn.
Bài có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm.
Ví dụ 1
15 3 2
0
30
50
100
0
190
10
50
100
80
90
200
50
100
0
12
--------
4
6
9
11
12
14
Ví dụ 2
5 4 2
0
50
100
150
200
--------
1
2
3
4
5
Trường trung học JOI mà bạn theo học tổ chức một cuộc thi định hướng mỗi năm một lần, với sự tham gia của toàn bộ học sinh. Thi định hướng là môn thi trong đó người tham gia dùng bản đồ và la bàn để đi qua các điểm kiểm tra được bố trí trên địa hình đồi núi.
Đặc điểm của cuộc thi ở trường JOI là học sinh tham gia theo đội hai người. Hai người trong mỗi đội cùng xuất phát từ điểm xuất phát được chỉ định, sau đó có thể di chuyển riêng để đến đích. Khi cả hai đã đến đích, mỗi điểm kiểm tra phải được ít nhất một người trong đội ghé qua. Hai người được phép ghé cùng một địa điểm và đi cùng một con đường trên hành trình.
Cuộc thi diễn ra trên núi JOI, nơi có \(N\) địa điểm và \(M\) con đường nối các địa điểm. Các địa điểm được đánh số từ \(1\) đến \(N\). Điểm xuất phát là địa điểm \(1\) ở chân núi, còn đích là địa điểm \(N\) trên đỉnh núi. Một số hoặc tất cả các địa điểm ngoài điểm xuất phát và đích được chọn làm điểm kiểm tra.
Để tránh hỗn loạn, trong thời gian thi, mỗi con đường chỉ được đi theo một chiều từ địa điểm thấp hơn đến địa điểm cao hơn. Không có hai địa điểm nào có cùng độ cao. Địa điểm \(1\) có độ cao thấp nhất và địa điểm \(N\) có độ cao cao nhất, nhưng số hiệu các địa điểm không nhất thiết được sắp theo thứ tự độ cao tăng dần. Ngay cả khi các đường được quy định một chiều như trên, từ địa điểm \(1\) vẫn có thể đến mọi địa điểm và từ mọi địa điểm vẫn có thể đến địa điểm \(N\).
Tìm tổng quãng đường nhỏ nhất mà hai người trong một đội phải đi để thỏa mãn các điều kiện. Dữ liệu bảo đảm tồn tại cách di chuyển hợp lệ cho hai người.
Đọc từ đầu vào chuẩn:
In ra tổng quãng đường nhỏ nhất của hai người trong một đội khi di chuyển thỏa mãn các điều kiện.
Giới hạn của kỳ thi gốc: thời gian CPU \(1\) giây, bộ nhớ \(64\) MB.
Theo thông tin kỹ thuật của kỳ thi gốc, chương trình phải kết thúc bình thường với mã trả về \(0\). Một bộ dữ liệu chỉ được tính điểm khi chương trình đáp ứng giới hạn thời gian, bộ nhớ và cho kết quả đúng. Giới hạn ngăn xếp mặc định là \(8\) MB; cần tránh tràn ngăn xếp khi dùng đệ quy.
Khi cần xử lý số nguyên không vừa kiểu \(32\) bit, hãy dùng kiểu số nguyên \(64\) bit, chẳng hạn long long trong C/C++, với định dạng %lld cho scanf và printf. Với lượng dữ liệu vào/ra lớn, tài liệu kỹ thuật khuyến nghị dùng scanf/printf thay cho cin/cout để tránh chi phí vào/ra quá lớn.
Bài có tổng cộng \(100\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(10\) điểm. Các tỷ lệ dưới đây mô tả các tập dữ liệu có phần giao nhau: