Vào ngày sinh nhật của LQDOJ, \(N\) đứa trẻ muốn được nhận kẹo và có một bịch kẹo gồm \(M\) vị khác nhau. Có một điều khiến phải băn khoăn rằng tất cả đứa trẻ muốn tất cả viên kẹo mà mình có đều phải có cùng một vị. cũng biết rằng các bạn trẻ sẽ ghen tị nếu có một bạn được quá nhiều kẹo. Để giải quyết các điều này một cách êm đềm nhất, quyết định chia kẹo sao cho mức độ ghen tị sẽ là nhỏ nhất có thể, biết rằng mức độ ghen tị là số kẹo nhiều nhất mà một bạn trẻ có được.
- một thành viên của Team Shiba quyết định tặng kẹo cho các bạn trẻ trong trường. CóVí dụ bịch kẹo của \(7\) viên kẹo vị \(X\) và \(4\) viên kẹo vị \(Y\) thì mà cần chia cho \(5\) đứa trẻ thì có thể chia như sau: \(XX\),\(XX\),\(YY\),\(YY\),\(YYY\). Mức độ ghen tị lúc này là \(3\), là mức độ ghen tị nhỏ nhất có thể.
cóTuy nhiên thực hiện việc chia kẹo là quá khó với
. Anh ấy nhờ các bạn lập trình tài năng của LQDOJ giúp tìm cách chia sao cho mức độ ghen tị là nhỏ nhất có thể.Yêu cầu: Bạn hãy giúp
tính mức độ ghen tị nhỏ nhất có thể. Biết rằng trường hợp có đứa trẻ không nhận được một viên kẹo nào là có thể xảy ra.Input
- Dòng đầu tiên chứa hai số nguyên dương lần lượt là \(N\) và \(M\) \((1 \le N \le 10^9,1 \le M \le 3 \times 10^5, M \le N)\).
- \(M\) dòng tiếp theo mỗi dòng chứa một số nguyên dương là số kẹo của từng vị mà có. Số kẹo của từng vị nằm trong đoạn \([1;10^9]\).
Output
- In ra kết quả bài toán sau khi thực hiện yêu cầu đề bài.
Scoring
- Subtask \(1\) (\(20\%\) số điểm): Có \(N \le 25\).
- Subtask \(2\) (\(80\%\) số điểm): Không có ràng buộc gì thêm.
Example
Test 1
Input
5 2
4
7
Output
3
Note
Ví dụ đã được giải thích ở trên.
Bình luận
ý tưởng tham khảo nè:
chặt nhị phân nhé
ban đầu cho l=1 và r =tổng các phần tử là số kẹo của tùng vị
dùng 1 hàm kiểm tra là (số kẹo + k - 1)/ k với k là mức độ ghen tị
đủ để chia cho n em thì r=mid-1, ngược lại là l=mid+1 cứ thế tìm và trả về giá trị nỏ nhất tìm được
code tham khảo:
include <bits/stdc++.h>
using namespace std;
bool check(vector<int> &keo, int n, long long maxn) {
long long daco = 0;
for (int candy : keo) {
daco += (candy + maxn - 1) / maxn; // Tương đương ceil(candy / maxn)
if (daco > n) return false; // Nếu vượt quá số trẻ, trả về false
}
return true;
}
long long nhonhat(vector<int> &keo, int n) {
long long l = 1, r = accumulate(keo.begin(), keo.end(), 0LL);
long long kq = r;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> keo(m);
for (int i = 0; i < m; i++) {
cin >> keo[i];
}
cout << nhonhat(keo, n) << endl;
return 0;
}
mình thử ceil mà sao k được vậy bạn