| # | Bài tập | Điểm | Thời gian: | Giới hạn bộ nhớ |
|---|---|---|---|---|
| 1 | JOI 2019 - Cake 3 | 100 (p) | 4.0s | 256M |
| 2 | JOI 2019 - Mergers | 100 (p) | 3.0s | 256M |
| 3 | JOI 2019 - Minerals | 100 (p) | 2.0s | 256M |
Hôm nay là sinh nhật của IOI-chan. Anh trai của cô bé, JOI-kun, đã đặt trước một chiếc bánh để chúc mừng. Tuy nhiên, cậu đặt nhầm \(N\) miếng bánh thay vì một chiếc bánh nguyên vẹn. Các miếng bánh được đánh số từ \(1\) đến \(N\). Miếng bánh thứ \(i\) có giá trị \(V_i\) và độ đậm màu \(C_i\).
JOI-kun quyết định chọn \(M\) miếng bánh khác nhau trong số \(N\) miếng và xếp chúng thành một vòng tròn. Gọi \(k_1, k_2, \ldots, k_M\) là chỉ số của các miếng bánh theo thứ tự trên vòng tròn, và đặt \(k_{M+1}=k_1\). Vẻ đẹp của cách sắp xếp được định nghĩa là
Hãy tính vẻ đẹp lớn nhất có thể đạt được bằng cách chọn và sắp xếp \(M\) miếng bánh.
Đọc từ đầu vào chuẩn theo định dạng:
N M
V_1 C_1
...
V_N C_N
In ra một dòng chứa một số nguyên: vẻ đẹp lớn nhất có thể đạt được.
Ví dụ 1
5 3
2 1
4 2
6 4
8 8
10 16
6
Chọn các miếng bánh \(1,3,2\) và xếp theo thứ tự đó trên vòng tròn. Tổng giá trị là \(2+6+4=12\), còn tổng chênh lệch độ đậm màu giữa các miếng kề nhau là \(|1-4|+|4-2|+|2-1|=6\). Vì vậy, vẻ đẹp là \(12-6=6\).
Chọn các miếng bánh \(2,3,4\) và xếp theo thứ tự đó cũng cho vẻ đẹp bằng \(6\). Không có cách nào cho vẻ đẹp lớn hơn, nên đáp án là \(6\).
Ví dụ 2
8 4
112103441 501365808
659752417 137957977
86280801 257419447
902409188 565237611
965602301 689654312
104535476 646977261
945132881 114821749
198700181 915994879
2323231661
JOI 2018/2019, trại huấn luyện mùa xuân, ngày thi thứ 4 (23/03/2019). Bản dịch tiếng Việt từ đề tiếng Anh chính thức của Ủy ban Olympic Tin học Nhật Bản. Trang công bố cấp phép nội dung theo CC BY-SA 4.0; bản dịch giữ cùng giấy phép.
Hợp chúng quốc JOI có \(N\) thành phố, được đánh số từ \(1\) đến \(N\), và \(N-1\) đường cao tốc hai chiều, được đánh số từ \(1\) đến \(N-1\). Đường cao tốc thứ \(i\) nối hai thành phố \(A_i\) và \(B_i\). Có thể đi từ một thành phố bất kỳ đến bất kỳ thành phố nào khác bằng các đường cao tốc.
Đất nước có \(K\) bang, được đánh số từ \(1\) đến \(K\). Thành phố thứ \(j\) thuộc bang \(S_j\). Mỗi bang có ít nhất một thành phố.
Đất nước được gọi là có thể chia tách nếu có thể chia toàn bộ các thành phố thành hai nhóm \(X\) và \(Y\) thỏa mãn tất cả các điều kiện sau:
Tổng thống K muốn làm cho đất nước không thể chia tách. Để thực hiện điều này, ông có thể tiến hành sáp nhập các bang. Trong một lần sáp nhập, ông chọn hai bang và gộp tất cả các thành phố của hai bang đó thành một bang.
Hãy tính số lần sáp nhập ít nhất để đất nước không thể chia tách. Lưu ý rằng một đất nước chỉ có một bang thì không thể chia tách.
Đọc từ đầu vào chuẩn theo định dạng:
N K
A_1 B_1
...
A_{N-1} B_{N-1}
S_1
...
S_N
In ra một dòng chứa một số nguyên: số lần sáp nhập ít nhất để đất nước không thể chia tách.
Ví dụ 1
5 4
1 2
2 3
3 4
3 5
1
2
1
3
4
1
Ban đầu, đất nước có thể chia tách. Chẳng hạn, có thể chọn nhóm \(X\) gồm các thành phố \(1,2,3,4\) và nhóm \(Y\) chỉ gồm thành phố \(5\).
Sau khi sáp nhập bang \(3\) và bang \(4\), đất nước không thể chia tách. Vì vậy, đáp án là \(1\).
Ví dụ 2
5 4
1 2
2 3
3 4
4 5
1
2
3
4
1
0
Ban đầu, đất nước đã không thể chia tách, nên đáp án là \(0\).
Ví dụ 3
2 2
1 2
1
2
1
JOI 2018/2019, trại huấn luyện mùa xuân, ngày thi thứ 4 (23/03/2019). Bản dịch tiếng Việt từ đề tiếng Anh chính thức của Ủy ban Olympic Tin học Nhật Bản. Trang công bố cấp phép nội dung theo CC BY-SA 4.0; bản dịch giữ cùng giấy phép.
Phòng thí nghiệm của giáo sư JOI đang nghiên cứu \(N\) loại khoáng vật. Mỗi loại có hai lát mẫu, tổng cộng có \(2N\) lát mẫu được đánh số từ \(1\) đến \(2N\).
Một hôm, trợ lý Bitaro làm rơi chiếc hộp đựng các lát mẫu. Cậu không còn biết những lát mẫu nào thuộc cùng một loại khoáng vật.
Phòng thí nghiệm có một thiết bị đo các bước sóng mà khoáng vật hấp thụ, qua đó đếm được số loại khoáng vật khác nhau trong số các lát mẫu đang đặt trong thiết bị. Bitaro muốn xác định \(N\) cặp lát mẫu cùng loại. Ban đầu, thiết bị không chứa lát mẫu nào. Cậu có thể thực hiện các thao tác sau:
Để giáo sư JOI không phát hiện ra sự cố, Bitaro chỉ có thể thực hiện tổng cộng không quá \(1\,000\,000\) thao tác.
Hãy viết chương trình nhận số loại khoáng vật và sử dụng thiết bị để xác định tất cả các cặp lát mẫu cùng loại.
Bạn cần nộp một tệp minerals.cpp, khai báo #include "minerals.h" và cài đặt hàm sau:
void Solve(int N);
Hàm này được gọi đúng một lần cho mỗi bộ dữ liệu. Tham số N là số loại khoáng vật.
Chương trình của bạn có thể gọi các hàm sau do trình chấm cung cấp:
int Query(int x);
Hàm này lấy lát mẫu x ra khỏi thiết bị nếu nó đang ở trong thiết bị; ngược lại, đưa lát mẫu đó vào thiết bị. Sau thao tác, hàm trả về số loại khoáng vật khác nhau đang có trong thiết bị.
Wrong Answer [1].Query quá \(1\,000\,000\) lần. Nếu vi phạm, chương trình bị đánh giá Wrong Answer [2].void Answer(int a, int b);
Hàm này thông báo rằng lát mẫu a và lát mẫu b thuộc cùng một loại khoáng vật.
Wrong Answer [3].a và b của tất cả các lần gọi, không giá trị nào được xuất hiện quá một lần. Nếu vi phạm, chương trình bị đánh giá Wrong Answer [4].Wrong Answer [5].Answer đúng \(N\) lần. Nếu khi Solve kết thúc mà số lần gọi không bằng \(N\), chương trình bị đánh giá Wrong Answer [6].Lưu ý quan trọng
Bạn có thể cài đặt thêm các hàm dùng nội bộ hoặc sử dụng biến toàn cục.
Chương trình của bạn không được sử dụng đầu vào chuẩn, đầu ra chuẩn hoặc giao tiếp với các tệp khác bằng bất kỳ cách nào. Tuy nhiên, bạn có thể ghi thông tin gỡ lỗi ra đầu ra lỗi chuẩn.
Gói chương trình mẫu gồm trình chấm thử grader.cpp, tệp khai báo minerals.h và tệp mã nguồn mẫu minerals.cpp. Để chạy thử, đặt ba tệp trong cùng một thư mục và biên dịch grader.cpp cùng với minerals.cpp thành chương trình grader.
Trình chấm thử
Trình chấm thật khác với trình chấm thử. Trình chấm thử chạy trong một tiến trình, đọc dữ liệu từ đầu vào chuẩn và ghi kết quả ra đầu ra chuẩn.
Trình chấm thử đọc dữ liệu theo định dạng:
N
X_1 Y_1
...
X_N Y_N
Với mỗi \(i\) từ \(1\) đến \(N\), lát mẫu \(X_i\) và lát mẫu \(Y_i\) thuộc cùng một loại khoáng vật.
Khi chương trình kết thúc, trình chấm thử ghi thông tin sau ra đầu ra chuẩn:
Query, chẳng hạn Accepted: 100.Wrong Answer [1].Nếu chương trình vi phạm nhiều loại lỗi, trình chấm thử chỉ thông báo một loại.
Các giá trị \(X_i,Y_i\) được định nghĩa trong phần dữ liệu vào của trình chấm thử.
Dưới đây là một dữ liệu vào của trình chấm thử và các lời gọi hàm tương ứng.
4
1 5
2 6
3 4
7 8
| Trình chấm gọi | Chương trình của bạn gọi | Giá trị trả về |
|---|---|---|
Solve(4) |
||
Query(1) |
\(1\) | |
Query(2) |
\(2\) | |
Query(5) |
\(2\) | |
Query(2) |
\(1\) | |
Answer(3, 4) |
Không có. | |
Answer(5, 1) |
Không có. | |
Answer(8, 7) |
Không có. | |
Answer(2, 6) |
Không có. |
JOI 2018/2019, trại huấn luyện mùa xuân, ngày thi thứ 4 (23/03/2019). Bản dịch tiếng Việt từ đề tiếng Anh chính thức của Ủy ban Olympic Tin học Nhật Bản. Trang công bố cấp phép nội dung theo CC BY-SA 4.0; bản dịch giữ cùng giấy phép.