我看别人的二分都是用时间来判断是否可以晒完,我这里用的是数量判断
#include <bits/stdc++.h>
long long n, a, b;
std::vector<int> v;
int cnt(int k)
{
int num = 0;
int sum = b * k;
for (int i = 0; i < n; i++)
{
if (v[i] <= a * k)
{
num++;
continue;
}
int temp = v[i] - a * k;
if (sum - temp >= 0)
{
num++;
sum -= temp;
}
}
return num;
}
int main()
{
std::cin >> n >> a >> b;
v.resize(n); // 预先分配空间
for (int i = 0; i < n; i++)
{
std::cin >> v[i];
}
std::sort(v.begin(), v.end());
int left = 1;
int right = 1e9;
int ans = 0;
while (left <= right)
{
int mid = (left + right) / 2;
if (cnt(mid) >= n)
{
ans = mid;
right = mid - 1;
}
else
{
left = mid+1;
}
}
std::cout << ans;
return 0;
}
求调