| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2011 - Planetary Exploration | 100 (p) | 0.5s | 64M |
| 2 | JOI 2011 - Books | 100 (p) | 1.0s | 64M |
| 3 | JOI 2011 - Shopping in JOI Kingdom | 100 (p) | 0.5s | 64M |
| 4 | JOI 2011 - Walking Santa | 100 (p) | 1.0s | 64M |
| 5 | JOI 2011 - Bug Party | 100 (p) | 1.5s | 256M |
Sau một hành trình dài, con tàu di dân xuyên không gian và thời gian chở bạn cuối cùng đã tìm thấy một hành tinh có vẻ thích hợp để sinh sống. Hành tinh được đặt tên là JOI; đúng như tên gọi, đây là một hành tinh khắc nghiệt với ba loại địa hình đan xen: rừng rậm (Jungle), biển (Ocean) và băng (Ice). Sau một cuộc khảo sát sơ bộ, bản đồ khu vực dự định định cư đã được lập.
Khu vực dự định định cư có dạng hình chữ nhật, dài \(M\) km theo hướng bắc–nam và \(N\) km theo hướng đông–tây, được chia thành các ô vuông có cạnh \(1\) km. Có tất cả \(MN\) ô. Ô ở hàng thứ \(p\) tính từ phía bắc và cột thứ \(q\) tính từ phía tây được ký hiệu là \((p,q)\). Ô ở góc tây bắc là \((1,1)\), còn ô ở góc đông nam là \((M,N)\). Mỗi ô có đúng một trong ba loại địa hình: rừng rậm, biển hoặc băng, lần lượt được biểu diễn bằng các chữ cái J, O, I.
Để lập kế hoạch định cư chi tiết, bạn cần khảo sát \(K\) vùng hình chữ nhật, đếm số ô rừng rậm, biển và băng trong mỗi vùng.
Cho thông tin về khu vực dự định định cư và các vùng cần khảo sát, hãy viết chương trình tính số ô thuộc từng loại địa hình trong mỗi vùng.
Đọc từ đầu vào chuẩn:
J, O, I, biểu diễn địa hình của \(N\) ô ở hàng thứ \(i\) tính từ phía bắc.Ghi ra đầu ra chuẩn \(K\) dòng. Dòng thứ \(j\) chứa ba số nguyên, cách nhau bởi dấu cách, lần lượt là số ô rừng rậm (J), biển (O) và băng (I) trong vùng khảo sát thứ \(j\).
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 điều kiện điểm thành phần dưới đây có thể chồng lấp:
Trong thị trấn của bạn có một hiệu sách cũ lâu đời mang tên JOI mà bạn thường xuyên ghé thăm. Mỗi cuốn sách có một giá cơ bản xác định, và hiệu sách JOI sẽ mua lại cuốn sách với giá đó.
Hiệu sách phân loại sách thành \(10\) thể loại, chẳng hạn như tiểu thuyết, truyện tranh và tạp chí. Các thể loại được đánh số từ \(1\) đến \(10\). Hiệu sách có dịch vụ mua lại với giá cao hơn nếu bạn bán cùng lúc nhiều cuốn sách thuộc cùng một thể loại. Cụ thể, nếu bán cùng lúc \(T\) cuốn sách thuộc một thể loại, giá mua lại của mỗi cuốn trong số đó sẽ cao hơn giá cơ bản của nó \(T-1\) yên. Ví dụ, nếu bán cùng lúc ba cuốn sách cùng thể loại có giá cơ bản lần lượt là \(100\), \(120\), \(150\) yên, giá mua lại tương ứng sẽ là \(102\), \(122\), \(152\) yên.
Vì lý do cá nhân, bạn đột ngột phải chuyển nhà. Bạn có \(N\) cuốn sách, nhưng khó có thể mang tất cả đến nơi ở mới, nên quyết định bán đúng \(K\) cuốn trong số đó cho hiệu sách JOI.
Cho giá cơ bản và số hiệu thể loại của từng cuốn sách, hãy viết chương trình tính tổng số tiền lớn nhất có thể nhận được khi bán sách.
Đọc từ đầu vào chuẩn:
Ghi ra đầu ra chuẩn một số nguyên trên một dòng: tổng số tiền lớn nhất có thể nhận được khi bán sách.
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 điều kiện điểm thành phần dưới đây có chồng lấp:
Ví dụ 1
7 4
14 1
13 2
12 3
14 2
8 2
16 3
11 2
60
Bán bốn cuốn sách thứ \(2\), \(4\), \(6\) và \(7\). Giá mua lại của mỗi cuốn sách thuộc thể loại \(2\) tăng thêm \(2\) yên, nên giá mua lại như sau:
| Số thứ tự | Giá cơ bản | Thể loại | Giá mua lại |
|---|---|---|---|
| \(2\) | \(13\) | \(2\) | \(15\) |
| \(4\) | \(14\) | \(2\) | \(16\) |
| \(6\) | \(16\) | \(3\) | \(16\) |
| \(7\) | \(11\) | \(2\) | \(13\) |
Tổng số tiền nhận được là \(15+16+16+13=60\) yên. Đây là tổng số tiền lớn nhất có thể nhận được.
Vương quốc JOI có \(N\) thị trấn, được nối với nhau bằng \(M\) con đường hai chiều. Có trung tâm mua sắm tại \(K\) thị trấn; người dân đi theo các con đường đến một trong những thị trấn đó để mua sắm.
Tùy vào vị trí ngôi nhà, người dân có thể phải đi một quãng đường rất dài để mua sắm, gây nhiều bất tiện. Để nắm rõ tình hình, nhà vua muốn biết khoảng cách ngắn nhất từ nhà đến một thị trấn có trung tâm mua sắm có thể lớn đến mức nào. Nhà có thể được xây ở giữa một con đường (xem giải thích ví dụ 1), khiến việc khảo sát trở nên rất khó khăn. Vì vậy, nhà vua nhờ bạn, một lập trình viên tài giỏi, viết chương trình thực hiện cuộc khảo sát này.
Cho thông tin về các con đường và các thị trấn có trung tâm mua sắm, hãy tìm giá trị lớn nhất của khoảng cách ngắn nhất từ một điểm trên đường đến một thị trấn có trung tâm mua sắm. Xét tất cả các điểm trên đường, kể cả hai đầu mút. Có thể bỏ qua khoảng cách di chuyển bên trong mỗi thị trấn.
Đọc từ đầu vào chuẩn:
Ghi ra đầu ra chuẩn một số nguyên: giá trị lớn nhất của khoảng cách ngắn nhất đến một thị trấn có trung tâm mua sắm, sau khi làm tròn đến số nguyên gần nhất. Nếu phần thập phân bằng \(0.5\), làm tròn lên.
Bài có tổng cộng \(100\) điểm, gồm \(10\) nhóm dữ liệu, mỗi nhóm \(10\) điểm. Mỗi nhóm gồm nhiều bộ dữ liệu; chỉ nhận được điểm của nhóm nếu trả lời đúng tất cả các bộ dữ liệu trong nhóm đó.
Ví dụ 1
3 3 1
1 2 1
2 3 1
3 1 1
1
2
Các thị trấn và con đường trong ví dụ này được biểu diễn trong hình dưới. Mọi con đường đều dài \(1\), và chỉ thị trấn \(1\) có trung tâm mua sắm.
Điểm xa trung tâm mua sắm nhất nằm trên con đường nối thị trấn \(2\) và thị trấn \(3\), cách thị trấn \(2\) một khoảng \(0.5\). Khoảng cách từ điểm này đến thị trấn có trung tâm mua sắm là \(1.5\). Làm tròn giá trị đó được \(2\), nên in ra 2.
Ví dụ 2
4 5 2
1 2 4
1 3 1
2 3 2
2 4 2
3 4 1
2
4
3
Cuối năm ngoái, ông già Noel quên tặng quà Giáng sinh cho các em nhỏ ở làng JOI. Để xin lỗi, ông quyết định mang bánh sô-cô-la đến cho các em. Ngày giao bánh đã là ngày mai, nên ông cần sớm lập kế hoạch di chuyển.
Làng JOI được chia thành một lưới ô vuông bởi \(W\) con đường thẳng theo hướng bắc–nam và \(H\) con đường thẳng theo hướng đông–tây. Các con đường bắc–nam được đánh số \(1,2,\ldots,W\) từ tây sang đông; các con đường đông–tây được đánh số \(1,2,\ldots,H\) từ nam lên bắc. Giao điểm của con đường bắc–nam thứ \(x\) tính từ phía tây và con đường đông–tây thứ \(y\) tính từ phía nam được ký hiệu là \((x,y)\).
Trong làng có \(N\) ngôi nhà, mỗi ngôi nhà nằm tại một giao điểm. Ông già Noel chỉ được di chuyển dọc theo các con đường. Thời gian đi giữa hai giao điểm kề nhau là \(1\).
Mọi ngôi nhà trong làng đều có trẻ em, nên ông già Noel phải giao đúng một chiếc bánh sô-cô-la đến mỗi nhà. Mang những chiếc bánh quý giá bay trên trời cùng tuần lộc có phần nguy hiểm, nên ông và tuần lộc sẽ hạ cánh tại một giao điểm trong làng, rồi ông đi bộ từ đó để giao bánh. Ông không đi bộ mang theo từ hai chiếc bánh trở lên cùng lúc. Vì vậy, sau mỗi lần giao bánh cho một nhà, ông quay về giao điểm đã hạ cánh.
Ông già Noel muốn chọn kế hoạch có tổng thời gian từ lúc hạ cánh đến khi giao xong bánh cho tất cả các nhà là nhỏ nhất. Lưu ý rằng thời gian quay về giao điểm hạ cánh sau khi giao bánh cho ngôi nhà cuối cùng không được tính vào tổng thời gian. Chỉ tính thời gian di chuyển, bỏ qua mọi thời gian khác.
Cho vị trí các ngôi nhà, hãy viết chương trình tìm tổng thời gian nhỏ nhất nếu chọn giao điểm hạ cánh tối ưu, đồng thời tìm vị trí giao điểm cần hạ cánh để đạt được tổng thời gian đó.
Đọc từ đầu vào chuẩn:
Ghi ra đầu ra chuẩn:
Các số nguyên cần xử lý trong bài này có thể vượt quá phạm vi biểu diễn của kiểu số nguyên \(32\) bit.
Bài có tổng cộng \(100\) điểm, gồm \(20\) nhóm dữ liệu, mỗi nhóm \(5\) điểm. Mỗi nhóm gồm nhiều bộ dữ liệu; chỉ nhận được điểm của nhóm nếu trả lời đúng tất cả các bộ dữ liệu trong nhóm đó. Các điều kiện điểm thành phần dưới đây có thể chồng lấp:
Ví dụ 1
5 4
3
1 1
3 4
5 3
10
3 3
Chẳng hạn, kế hoạch sau đạt tổng thời gian nhỏ nhất:
Ví dụ 2
4 6
8
1 3
3 2
4 4
2 5
2 3
3 3
3 4
2 4
21
2 3
Ông già Noel được phép hạ cánh tại một giao điểm có ngôi nhà.
Bạn đã từng nghe đến công ty Just Odd Inventions chưa? Công việc của công ty này là tạo ra “những phát minh kỳ quặc” (just odd inventions). Ta gọi tắt công ty là JOI.
Công ty JOI đang nghiên cứu cách nhốt nhiều vi sinh vật còn sống trong cùng một đĩa Petri. Có \(N\) vi sinh vật cần nghiên cứu, được đánh số \(1,2,\ldots,N\). Khi bị nhốt vào đĩa Petri, mỗi vi sinh vật lập tức giải phóng một chất độc hại gọi là foo (fatally odd object). Lượng foo mà mỗi vi sinh vật giải phóng đã được biết trước. Toàn bộ lượng foo do các vi sinh vật trong đĩa giải phóng được chia đều để các vi sinh vật đó hấp thụ. Khả năng chịu đựng foo của mỗi vi sinh vật cũng đã được biết trước; nếu hấp thụ một lượng lớn hơn ngưỡng này, vi sinh vật sẽ chết.
Vi sinh vật \(i\) giải phóng \(a_i\) miligam foo và chịu được tối đa \(b_i\) miligam foo. Nói cách khác, nếu nhốt các vi sinh vật \(i_1,i_2,\ldots,i_k\) vào đĩa Petri, mỗi vi sinh vật trong đĩa sẽ hấp thụ lượng foo, tính bằng miligam, bằng
Vi sinh vật \(i\) trong đĩa sẽ chết nếu lượng hấp thụ này lớn hơn \(b_i\).
Theo yêu cầu của công ty JOI, bạn phải nhốt càng nhiều vi sinh vật còn sống vào cùng một đĩa Petri càng tốt. Tuy nhiên, xác vi sinh vật sẽ ảnh hưởng xấu đến môi trường trong đĩa, nên không được để bất kỳ vi sinh vật nào trong đĩa chết do hấp thụ foo.
Việc công ty JOI kiếm lợi nhuận bằng cách tạo ra “những phát minh kỳ quặc” như thế nào vẫn là một bí ẩn; ngay cả trong công ty cũng không ai ngoài giám đốc biết được điều đó.
Cho số lượng vi sinh vật cần nghiên cứu, lượng foo giải phóng và ngưỡng chịu đựng foo của từng vi sinh vật, hãy viết chương trình tìm số vi sinh vật lớn nhất có thể nhốt vào cùng một đĩa Petri mà không vi sinh vật nào chết.
Đọc từ đầu vào chuẩn:
Ghi ra đầu ra chuẩn trên một dòng số vi sinh vật lớn nhất có thể nhốt vào cùng một đĩa Petri mà không vi sinh vật nào chết.
Các số nguyên cần xử lý trong bài này có thể vượt quá phạm vi biểu diễn của kiểu số nguyên \(32\) bit.
Bài có tổng cộng \(100\) điểm, gồm \(10\) nhóm dữ liệu, mỗi nhóm \(10\) điểm. Mỗi nhóm gồm nhiều bộ dữ liệu; chỉ nhận được điểm của nhóm nếu trả lời đúng tất cả các bộ dữ liệu trong nhóm đó.
Ví dụ 1
6
12 8
5 9
2 4
10 12
6 7
13 9
3
Nếu cho các vi sinh vật \(2\), \(4\), \(5\) vào đĩa Petri, tổng lượng foo được giải phóng là \(5+10+6=21\) miligam. Mỗi vi sinh vật hấp thụ \(\frac{21}{3}=7\) miligam.
Ngưỡng chịu đựng foo của các vi sinh vật \(2\), \(4\), \(5\) lần lượt là \(9\), \(12\), \(7\) miligam, nên không vi sinh vật nào trong đĩa chết. Không thể cho từ \(4\) vi sinh vật trở lên vào đĩa mà vẫn bảo đảm tất cả đều sống.