【ybtoj 高效进阶 1.2】 【贪心】 奶牛晒衣服

【ybtoj 高效进阶 1.2】 【贪心】 奶牛晒衣服

题目

在这里插入图片描述
在这里插入图片描述


解题思路

贪心首选:二分
二分晒衣服的时间
然后判断是否能在这个时间内晒完所有
可以就将这个时间变成右边界
不然它+1变成左边界
据说可以用大根堆,下次试试


代码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,m,t,l,r,ans;
int a[500010],x[500010];  //a是直接晒干的时间,x是湿的程度
bool pd(int mid)
{
    
    
	 int j=0;  //使用甩干机的时间
	 for (int i=1;i<=n;i++)
	 {
    
    
	 	 if (a[i]>mid)
	 	 {
    
    
	 	 	int c=x[i]-mid*m;  
	 	 	if (c%t!=0)
	 	 	   j+=c/t+1;
	 	 	   else j+=c/t;  
		 } 
		 if (j>mid) return false;
	 }
	 return true;
}
int main()
{
    
    
	scanf("%d%d%d",&n,&m,&t);
	for (int i=1;i<=n;i++)
	{
    
    
		scanf("%d",&a[i]);  
		x[i]=a[i]; 
		if (a[i]%m)
		   a[i]=a[i]/m+1;
		   else a[i]=a[i]/m;
		r=max(r,a[i]);
	}
	l=1;
	while (l<r)
	{
    
    
		  int mid=(l+r)/2;
		  if (pd(mid))
		     r=mid;
		     else l=mid+1;  
	}
	printf("%d",l);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45621109/article/details/111704862
今日推荐