CEOI 2025 - Highest
Xem PDF
Điểm:
2600 (p)
Thời gian:
2.0s
Bộ nhớ:
1G
Input:
bàn phím
Output:
màn hình
Đề bài
Trong một vũ trụ khác, Vlad bị mắc kẹt trong một phiên bản tương lai của pháo đài Poenari gồm \(n\) tầng, được đánh số từ \(0\) đến \(n-1\). Từ mỗi tầng \(i\), Vlad chỉ có thể đi lên theo một trong hai cách:
- Đi cầu thang, tốn \(1\) giọt máu. Cầu thang từ tầng \(i\) cho phép Vlad đi lên nhiều nhất \(v[i]\) tầng, tức là đến bất kỳ tầng nào từ \(i+1\) đến \(i+v[i]\) mà không vượt quá tầng \(n-1\).
- Hóa thành dơi và đi qua ống thông gió, tốn \(2\) giọt máu. Ống thông gió từ tầng \(i\) cho phép Vlad đi lên nhiều nhất \(w[i]\) tầng, tức là đến bất kỳ tầng nào từ \(i+1\) đến \(i+w[i]\) mà không vượt quá tầng \(n-1\).
Hai người anh em của Vlad là Radu và Mircea đưa ra \(m\) kịch bản. Mỗi kịch bản gồm hai tầng \(A\) và \(B\) với \(A\le B\). Với mỗi kịch bản, hãy tìm số giọt máu ít nhất Vlad phải trả để đi từ tầng \(A\) đến tầng \(B\).
Chi tiết cài đặt
Bạn cần cài đặt hàm sau:
C++
std::vector<int> solve(
std::vector<int>& v,
std::vector<int>& w,
std::vector<std::pair<int, int>>& queries
);
v: mảng độ dài \(n\);v[i]là số tầng nhiều nhất cầu thang tại tầng \(i\) có thể đưa Vlad đi lên.w: mảng độ dài \(n\);w[i]là số tầng nhiều nhất hệ thống ống thông gió tại tầng \(i\) có thể đưa Vlad đi lên.queries: mảng độ dài \(m\) gồm các cặp \((A,B)\) như mô tả trong đề.- Hàm phải trả về một mảng độ dài \(m\), trong đó phần tử thứ \(i\) là đáp án của truy vấn thứ \(i\).
Ràng buộc
- \(1\le n,m\le500\,000\).
- \(1\le v[i],w[i]\le n\) với mọi \(0\le i<n\).
- \(0\le A\le B\le n-1\) với mọi truy vấn.
Phân nhóm
- Phân nhóm 1 (5 điểm): \(1\le n\le300\), \(1\le m\le500\,000\).
- Phân nhóm 2 (7 điểm): \(1\le n\le3\,000\), \(1\le m\le3\,000\).
- Phân nhóm 3 (11 điểm): \(1\le n\le20\,000\), \(1\le m\le20\,000\).
- Phân nhóm 4 (44 điểm): \(1\le n\le200\,000\), \(1\le m\le200\,000\).
- Phân nhóm 5 (8 điểm): \(1\le n,m\le500\,000\); với mọi \(0\le i<j\le n-1\), ta có \(v[i]\le v[j]\) và \(w[i]\le w[j]\).
- Phân nhóm 6 (25 điểm): Không có ràng buộc bổ sung.
Ví dụ
Ví dụ 1
Input
solve(
{2, 3, 1, 1, 1, 1, 2},
{3, 4, 1, 2, 1, 2, 2},
{{0, 4}, {0, 5}, {0, 6}}
)
Output
{2, 3, 4}
Giải thích
Ở đây \(n=7\).
- Với truy vấn \((0,4)\), Vlad đi từ \(0\) đến \(1\) với chi phí \(1\), rồi từ \(1\) đến \(4\) với chi phí \(1\). Tổng chi phí là \(2\).
- Với truy vấn \((0,5)\), có hai đường đi tối ưu: \(0\to1\to4\to5\) với chi phí \(1+1+1=3\), hoặc \(0\to1\to5\) với chi phí \(1+2=3\).
- Với truy vấn \((0,6)\), một đường đi có chi phí \(4\) là \(0\to1\to5\to6\), với chi phí \(1+2+1=4\).
Ví dụ 2
Input
solve(
{1, 1, 1, 2, 3, 2, 1, 1, 2, 3},
{2, 4, 1, 4, 1, 4, 1, 3, 2, 3},
{{3, 9}, {0, 9}, {0, 7}, {0, 4}, {3, 5}}
)
Output
{3, 5, 4, 3, 1}
Giải thích
Các đường đi tối ưu tương ứng là:
- \((3,9)\): \(3\to5\) với chi phí \(1\), rồi \(5\to9\) với chi phí \(2\); tổng bằng \(3\).
- \((0,9)\): \(0\to1\) với chi phí \(1\), \(1\to5\) với chi phí \(2\), rồi \(5\to9\) với chi phí \(2\); tổng bằng \(5\).
- \((0,7)\): \(0\to1\) với chi phí \(1\), \(1\to5\) với chi phí \(2\), rồi \(5\to7\) với chi phí \(1\); tổng bằng \(4\).
- \((0,4)\): \(0\to1\) với chi phí \(1\), rồi \(1\to4\) với chi phí \(2\); tổng bằng \(3\).
- \((3,5)\): đi thẳng từ \(3\) đến \(5\) với chi phí \(1\).
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\).
- Dòng \(2\):
v[0] v[1] ... v[n-1]. - Dòng \(3\):
w[0] w[1] ... w[n-1]. - Dòng \(4\): \(m\).
- Dòng \(5+i\) với \(0\le i<m\):
A Bcủa truy vấn thứ \(i\).
Trình chấm mẫu in \(m\) dòng là các phần tử của mảng do solve trả về.
Kỳ thi:
- CEOI 2025 - Ngày 1 (9 Tháng bảy, 2025)
Bình luận