17藍橋杯 分巧克力

//二分答案 
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,k,l,r,ans;
struct cho{
	int x,y;
};
cho c[100010];
int judge(int x){
	int tot=0;//表示以x爲邊長的巧克力能分多少塊 
	for(int i=1;i<=n;i++){
		tot+=(c[i].x/x)*(c[i].y/x);
	}
	return tot>=k;//能分返回1,不能返回0 
}
int main()
{
	scanf("%d%d",&n,&k);
	l=1;
	for(int i=1;i<=n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		r=max(r,min(x,y));
		c[i].x=x;c[i].y=y;
	}
	while(l<=r)
	{
		int mid=(l+r)/2;
		if(judge(mid)){
			ans=mid;
			l=mid+1;
		}
		else r=mid-1;
	}
	printf("%d",ans);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章