trang chủ / bài tập / climb / lời giải

Leo Núi

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Lời giải: Leo Núi

Hướng tiếp cận

Sắp xếp tối ưu thứ tự người leo rồi mô phỏng tham lam. Chia người thành hai nhóm theo quan hệ UD, sau đó sắp xếp mỗi nhóm theo tiêu chí phù hợp để tối thiểu hoá tổng thời gian.

Nhận xét quan trọng

  1. Nhóm "nhanh lên, chậm xuống" (U<D): nếu leo lên trước, thời gian chờ trên đỉnh ngắn hơn — nên xếp theo U tăng dần.
  2. Nhóm "chậm lên, nhanh xuống" (UD): nếu leo xuống trước (sau khi lên xong), thời gian lãng phí nhỏ hơn — nên xếp theo D giảm dần.
  3. Tất cả người trong nhóm U<D đều nên leo trước nhóm UD.
  4. Sau khi có thứ tự tối ưu, mô phỏng: duy trì up_end (thời điểm đường lên rảnh) và down_end (thời điểm đường xuống rảnh).

Thuật toán

  1. Chia người thành hai nhóm: nhóm A (Ui<Di) và nhóm B (UiDi).
  2. Sắp xếp nhóm A theo Ui tăng dần, nhóm B theo Di giảm dần.
  3. Ghép: tất cả nhóm A trước, nhóm B sau.
  4. Mô phỏng theo thứ tự đã sắp:
    • Người thứ i bắt đầu leo lên lúc up_end. Lên đến đỉnh lúc up_end + U_i.
    • Người này bắt đầu leo xuống lúc max(up_end + U_i, down_end). Xuống xong lúc start_down + D_i.
    • Cập nhật up_end += U_i, down_end = start_down + D_i.
  5. Đáp án là down_end sau khi xử lý tất cả.

Độ phức tạp

  • Thời gian: O(NlogN)
  • Bộ nhớ: O(N)

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0