大体思路是先排序再二分答案,check里面是先求湿度最大的衣服在烘干机里用的时间,然后用这个时间下去判断,如果时间不够那就更新时间,但是一直不过,求指点
#include <iostream>
#include <algorithm>
using namespace std;
int a , b , n , s[500003];
bool cmp(int a , int b)
{
return a > b;
}
bool check(int x)
{
int maxl = s[1] / (a+b);
for(int i = 2 ; i <= n ; i ++)
{
if(s[i] - maxl * a > 0)
maxl += (s[i] - maxl * a ) / (a+b) ;
}
return maxl >= x;
}
int main()
{
cin >> n >> a >> b;
for(int i = 1 ; i <= n ; i ++)
scanf("%d",&s[i]);
sort(s+1,s+1+n);
int L = 0 , R = 1e9 , mid;
while(L < R)
{
mid = (L + R)/2;
if( check(mid) )
L = mid + 1;
else
R = mid - 1;
}
cout << R;
return 0;
}