IOI 2017 - Wiring

Xem PDF



Dạng bài
Ngôn ngữ cho phép
C++, Java
Điểm: 2400 (p) Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Maryam là một kỹ sư điện đang thiết kế hệ thống dây nối trên một tháp truyền thông. Trên tháp có các điểm kết nối ở những độ cao khác nhau. Mỗi đoạn dây nối hai điểm kết nối, và mỗi điểm có thể được nối với một số lượng tùy ý các đoạn dây. Có hai loại điểm kết nối: đỏ và xanh.

Trong bài toán này, tháp được xem như một đường thẳng. Các điểm kết nối đỏ và xanh nằm tại những tọa độ nguyên không âm trên đường thẳng đó. Độ dài của một đoạn dây bằng khoảng cách giữa hai điểm mà nó nối.

Hãy giúp Maryam tìm tổng độ dài dây nhỏ nhất trong một sơ đồ kết nối thỏa mãn: mỗi điểm kết nối có ít nhất một đoạn dây nối nó với một điểm kết nối khác màu.

Chi tiết cài đặt

Bạn cần cài đặt hàm C++ sau, được khai báo trong tệp wiring.h:

C++
long long min_total_length(std::vector<int> r, std::vector<int> b);
  • r: mảng gồm \(n\) phần tử, chứa tọa độ các điểm kết nối đỏ theo thứ tự tăng dần.
  • b: mảng gồm \(m\) phần tử, chứa tọa độ các điểm kết nối xanh theo thứ tự tăng dần.

Hàm phải trả về tổng độ dài dây nhỏ nhất trong tất cả các sơ đồ kết nối hợp lệ. Giá trị trả về là số nguyên \(64\) bit, có kiểu long long trong C++.

Ràng buộc

  • \(1 \le n,m \le 100\,000\).
  • \(0 \le r[i] \le 10^9\) với mọi \(0 \le i \le n-1\).
  • \(0 \le b[i] \le 10^9\) với mọi \(0 \le i \le m-1\).
  • Mỗi mảng rb được sắp xếp theo thứ tự tăng dần.
  • Tất cả \(n+m\) giá trị trong hai mảng đôi một khác nhau.

Phân nhóm

Subtask Điểm Ràng buộc bổ sung
1 7 \(n,m \le 200\).
2 13 Mọi điểm kết nối đỏ đều có tọa độ nhỏ hơn tọa độ của mọi điểm kết nối xanh.
3 10 Trong mỗi dãy \(7\) điểm kết nối liên tiếp theo thứ tự tọa độ, có ít nhất một điểm đỏ và ít nhất một điểm xanh.
4 25 Tất cả các điểm kết nối có tọa độ phân biệt thuộc đoạn \([1,n+m]\).
5 45 Không có ràng buộc bổ sung.

Trình chấm mẫu

Trình chấm mẫu đọc dữ liệu theo định dạng sau:

  • Dòng \(1\): \(n\ m\).
  • Dòng \(2\): \(r[0]\ r[1]\ \ldots\ r[n-1]\).
  • Dòng \(3\): \(b[0]\ b[1]\ \ldots\ b[m-1]\).

Trình chấm mẫu in giá trị trả về của min_total_length trên một dòng duy nhất.

Ví dụ

Ví dụ 1

Dữ liệu vào
4 5
1 2 3 7
0 4 5 9 10
Kết quả ra
10
Giải thích

Ví dụ tương ứng với lời gọi hàm:

C++
min_total_length({1, 2, 3, 7}, {0, 4, 5, 9, 10});

\(4\) điểm kết nối đỏ tại các tọa độ \(1,2,3,7\)\(5\) điểm kết nối xanh tại các tọa độ \(0,4,5,9,10\). Hình dưới đây minh họa một sơ đồ kết nối tối ưu, với tháp được vẽ nằm ngang. Trong bản in đen trắng, các điểm đỏ được biểu diễn bằng màu tối và các điểm xanh bằng màu sáng.

Tổng độ dài dây trong sơ đồ này là

\[ 1+2+2+2+3=10. \]

Đây là giá trị nhỏ nhất có thể, nên hàm trả về \(10\). Chú ý rằng điểm kết nối tại tọa độ \(7\) được nối với hai đoạn dây.

Tệp

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: