Hướng dẫn giải của Chạy vòng tròn
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.
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.
Lời giải: Chạy vòng tròn
Hướng tiếp cận
Với mỗi cặp bò có , số lần vượt = (trong đó là tốc độ bò nhanh nhất). Tính tổng này hiệu quả bằng tiền tố lap + đếm nghịch chuyển.
Nhận xét quan trọng
- Cuộc đua kết thúc tại thời điểm . Bò vượt bò mỗi giây, nên số lần vượt = .
- Đặt , .
- .
- Tổng dùng tiền tố. Số cặp với = đếm nghịch chuyển của mảng frac.
Thuật toán
- Sắp xếp tốc độ tăng dần. Tính lap[], frac[].
- Tính bằng tiền tố lap.
- Đếm nghịch chuyển của frac[] dùng BIT (Fenwick Tree).
- Đáp án = bước 2 - bước 3.
Độ phức tạp
- Thời gian:
- Bộ nhớ:
Bình luận