Gửi bài giải
Điểm:
15,00 (OI)
Giới hạn thời gian:
1.0s
Giới hạn bộ nhớ:
256M
Input:
stdin
Output:
stdout
Tác giả:
Người đăng:
Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch
Có N cây gỗ, có chiều cao lần lượt là ~A_1,A_2,...,A_N~. Bạn cần lấy một lượng gỗ độ cao tối thiểu là M bằng cách chặt từ N cây theo cách như sau: chặt tất cả những phần thừa của các cây có độ cao lớn hơn H.
Yêu cầu: Hãy tìm giá trị H lớn nhất để bạn có thể lấy được lượng gỗ tối thiểu là M.
Input:
- Dòng 1 chứa 2 số nguyên N và M .
- Dòng 2 chứa N số nguyên ~A_1,A_2,...,A_N~, là chiều cao mỗi cây gỗ tương ứng. Giả sử luôn tồn tại cách chặt.
Output:
- Số H duy nhất là kết quả bài toán trên.
Example:
Input:
4 7
20 15 10 17
Output:
15
Giải thích:
Cây 1 chặt được (20-15)=5.
Cây 4 chặt được (17-15)=2.
Tổng số gỗ chặt được nếu H=15 là 7.
Constraints:
~1 \le N \le 2.10^5 ; 1 <= M <= 2.10^6 ; A_i \le 10^5~
Bình luận
Solution by Shinoz
Mình viết cái này ra để một số bạn chưa hiểu hoặc không biết làm có thể hiểu và bắt đầu tiếp xúc với tham lam (aka Greedy)
Đây không hoàn toàn là code mình tự nghĩ ra, mà đa số là được thầy Sơn giảng và giải thích
Input 1:
Output 1:
Idea:
Chứng minh sum - s - m là phần thừa
Ta sẽ xét ví dụ khác ví dụ đã cho trên vì ta thấy ans ở đây là 15 nên phần thừa sẽ bằng 0.
Input 2:
Output 2:
Code C++ mẫu code
Chặt nhị phân khi nào rảnh mình sẽ up sol
.