救救救救
查看原帖
救救救救
789834
klein__blue楼主2023/1/18 22:05

大体思路是先排序再二分答案,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;
}


2023/1/18 22:05
加载中...