| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2010 - A Traveler | 100 (p) | 1.0s | 64M |
| 2 | JOI 2010 - Dividing Snacks | 100 (p) | 1.0s | 64M |
| 3 | JOI 2010 - Icicles | 100 (p) | 1.0s | 64M |
| 4 | JOI 2010 - Exposition | 100 (p) | 1.0s | 64M |
| 5 | JOI 2010 - Dungeon | 100 (p) | 1.0s | 64M |
Bạn là một lữ khách đang đi trên con đường JOI. Con đường này chạy thẳng theo hướng đông–tây, với \(n\) thị trấn dừng chân được đánh số từ \(1\) đến \(n\) theo thứ tự từ tây sang đông. Thị trấn \(1\) nằm xa nhất về phía tây, còn thị trấn \(n\) nằm xa nhất về phía đông.
Bạn xuất phát từ thị trấn \(1\) và thực hiện chuyến đi kéo dài \(m\) ngày. Lịch trình được xác định bởi dãy \(a_1,a_2,\ldots,a_m\). Số nguyên khác \(0\) \(a_i\) mô tả cách di chuyển trong ngày thứ \(i\): nếu bắt đầu ngày đó ở thị trấn \(k\), bạn đi thẳng từ thị trấn \(k\) đến thị trấn \(k+a_i\).
Cho số thị trấn \(n\), số ngày đi \(m\), khoảng cách giữa các thị trấn và dãy \(a_1,a_2,\ldots,a_m\), hãy viết chương trình tính phần dư khi chia tổng quãng đường bạn đi trong \(m\) ngày cho \(100000=10^5\).
Dữ liệu được cung cấp qua đầu vào chuẩn.
In ra đầu ra chuẩn một dòng chứa phần dư khi chia tổng quãng đường đi trong \(m\) ngày cho \(100000=10^5\).
Bài này có tổng cộng \(20\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(2\) điểm. Các tỷ lệ dưới đây được tính trên tổng điểm của bài.
Ví dụ 1
7 5
2
1
1
3
2
1
2
-1
3
2
-3
18
Ngày thứ \(1\), bạn đi từ thị trấn \(1\) đến thị trấn \(3\). Ngày thứ \(2\), bạn đi từ thị trấn \(3\) đến thị trấn \(2\). Ngày thứ \(3\), bạn đi từ thị trấn \(2\) đến thị trấn \(5\). Ngày thứ \(4\), bạn đi từ thị trấn \(5\) đến thị trấn \(7\). Ngày thứ \(5\), bạn đi từ thị trấn \(7\) đến thị trấn \(4\). Tổng quãng đường đi trong \(5\) ngày là \(18\).
Có một thanh bánh dài \(N\) milimét, trong đó \(N\) là số chẵn. Hai người có liên quan đến JOI quyết định cắt thanh bánh thành nhiều đoạn rồi chia nhau, sao cho mỗi người nhận được các đoạn có tổng chiều dài là \(N/2\) milimét.
Không rõ vì sao, độ dễ cắt của thanh bánh lại khác nhau tùy theo vị trí. Hai người đã kiểm tra từng vị trí cách nhau \(1\) milimét tính từ đầu trái và xác định số giây cần để cắt tại mỗi vị trí.
Hãy viết chương trình tính tổng thời gian cắt ít nhất, tính bằng giây, để hai người có thể chia thanh bánh như trên.
Dữ liệu được cung cấp qua đầu vào chuẩn.
Lưu ý rằng chỉ có \(N-1\) vị trí có thể cắt.
In ra đầu ra chuẩn một dòng chứa tổng số giây ít nhất cần để cắt thanh bánh cho hai người chia nhau.
Bài này có tổng cộng \(20\) điểm, gồm \(20\) bộ dữ liệu, mỗi bộ \(1\) điểm. Các tỷ lệ dưới đây được tính trên tổng điểm của bài.
Dưới mái hiên nhà cậu bé JOI sống ở Canada đã hình thành những cột băng rất đẹp. Nhân dịp này, JOI quyết định tìm hiểu về chúng.
Có \(N\) cột băng dưới mái hiên, nằm trên cùng một đường thẳng. Cột băng thứ \(i\) nằm ở vị trí cách đầu trái của mái hiên \(i\) cm (\(1\le i\le N\)), và ban đầu dài \(a_i\) cm, trong đó \(a_i\) là số nguyên dương. Các cột băng dài ra theo các quy tắc sau:
Ban đầu, mọi cặp cột băng kề nhau đều có chiều dài khác nhau. Với điều kiện này, sau đủ lâu, cả \(N\) cột băng đều sẽ gãy và có chiều dài \(0\) cm. JOI muốn biết cần bao lâu để đạt đến trạng thái đó.
Cho chiều dài ban đầu của \(N\) cột băng và chiều dài giới hạn \(L\), hãy viết chương trình tính thời gian cho đến khi tất cả các cột băng đều gãy.
Dữ liệu được cung cấp qua đầu vào chuẩn.
In ra đầu ra chuẩn một dòng chỉ chứa một số nguyên: thời gian tính bằng giờ cho đến khi tất cả các cột băng đều gãy.
Bài này có tổng cộng \(20\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(2\) điểm. Các tỷ lệ dưới đây được tính trên tổng điểm của bài.
Ví dụ 1
4 6
4
2
3
5
8
Các cột băng thứ \(1,2,3,4\) lần lượt gãy sau \(2,8,4,1\) giờ. Vì vậy, tất cả các cột băng đều gãy sau \(8\) giờ, nên in ra \(8\).
Ví dụ 2
6 10
3
4
1
9
5
1
15
Thành phố JOI quyết định tổ chức một cuộc triển lãm quy mô lớn.
Cuộc triển lãm lần này có hai chủ đề. Mỗi một trong \(N\) cơ sở trưng bày của thành phố sẽ tổ chức trưng bày theo đúng một trong hai chủ đề đó.
Vị trí của mỗi cơ sở được biểu diễn bằng tọa độ \((x,y)\) trên mặt phẳng. Thời gian di chuyển từ cơ sở tại \((x,y)\) đến cơ sở tại \((x',y')\) là
Với số nguyên \(a\), ký hiệu \(|a|\) biểu thị giá trị tuyệt đối của \(a\).
Để tạo sự thống nhất giữa các cơ sở cùng chủ đề và tránh gây bất tiện cho những người chỉ quan tâm đến một chủ đề, thành phố muốn phân chia chủ đề sao cho thời gian di chuyển giữa hai cơ sở cùng chủ đề ngắn nhất có thể. Có thể phân chia theo bất kỳ cách nào, miễn là không gán cùng một chủ đề cho tất cả các cơ sở.
Gọi \(M\) là thời gian di chuyển lớn nhất giữa hai cơ sở được gán cùng chủ đề. Cho vị trí của \(N\) cơ sở, hãy viết chương trình tìm giá trị nhỏ nhất có thể của \(M\).
Dữ liệu được cung cấp qua đầu vào chuẩn.
Không có hai cơ sở nào nằm tại cùng một tọa độ.
In ra đầu ra chuẩn đúng một dòng chứa giá trị nhỏ nhất có thể của \(M\), tức thời gian di chuyển lớn nhất giữa hai cơ sở cùng chủ đề.
Bài này có tổng cộng \(20\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(2\) điểm. Các tỷ lệ dưới đây được tính trên tổng điểm của bài.
Ví dụ 1
5
0 0
1 0
-1 -2
0 1
-1 1
3
Chẳng hạn, gán một chủ đề cho các cơ sở tại \((0,0)\), \((1,0)\), \((0,1)\) và chủ đề còn lại cho các cơ sở tại \((-1,-2)\), \((-1,1)\). Khi đó, thời gian di chuyển giữa mọi cặp cơ sở cùng chủ đề đều không vượt quá \(3\).
Không thể làm cho tất cả các thời gian di chuyển này đều không vượt quá \(2\), nên in ra \(3\).
Bạn muốn lấy kho báu nằm ở tầng ngầm thứ \(N\) của một hầm ngục. Ban đầu, bạn đang ở tầng ngầm thứ \(1\) và có \(H\) thể lực, trong đó \(H\) là số nguyên dương. Mỗi lần xuống tầng bên dưới, bạn sẽ tiêu hao thể lực. Lượng thể lực tiêu hao khi đi xuống từ mỗi tầng đã được biết trước.
Mỗi tầng có một suối hồi phục. Lượng thể lực hồi phục sau mỗi lần sử dụng suối được xác định riêng cho từng tầng. Nếu thể lực giảm xuống \(0\) hoặc thấp hơn, bạn sẽ chết. Thể lực cũng không bao giờ vượt quá \(H\), kể cả khi hồi phục. Bạn có thể sử dụng suối bao nhiêu lần tùy ý, nhưng việc hồi phục mất thời gian, nên bạn muốn dùng suối ít lần nhất có thể.
Một khi đã xuống tầng bên dưới, bạn không thể quay lại tầng phía trên cho đến khi lấy được kho báu.
Cho \(N\), \(H\), lượng thể lực tiêu hao khi đi xuống từ mỗi tầng và lượng thể lực hồi phục sau mỗi lần sử dụng suối ở từng tầng, hãy viết chương trình tính số lần sử dụng suối ít nhất cần thiết để đến tầng ngầm thứ \(N\) mà không để thể lực giảm xuống \(0\) hoặc thấp hơn.
Dữ liệu được cung cấp qua đầu vào chuẩn, gồm \(N\) dòng.
Mọi dữ liệu chấm đều bảo đảm có cách đến được tầng ngầm thứ \(N\).
In ra đầu ra chuẩn một dòng chứa số lần sử dụng suối ít nhất cần thiết để đến tầng ngầm thứ \(N\) mà không để thể lực giảm xuống \(0\) hoặc thấp hơn.
Bài này có tổng cộng \(20\) điểm, gồm \(10\) bộ dữ liệu, mỗi bộ \(2\) điểm. Các tỷ lệ dưới đây được tính trên tổng điểm của bài.
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 số nguyên 32 bit.
Ví dụ 1
10 10
4 2
2 5
6 1
7 3
6 4
9 6
0 8
4 1
9 4
10