luogu P2440 木材加工【二分】

这道题是一道比较裸的二分答案
不断二分找符合条件的最大切割长度即可。
注意: 二分边界 1 1 1 ~ j s js js 会爆 i n t int int.

代码

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long n,m,a[1000010],x,js=0;
long long ans;
bool check(long long x)
{
	long long sum=0;
	for(long long i=1; i<=n; i++)
	   sum+=a[i]/x;
	if(sum>=m)
	  return 1;
	else
	  return 0;
}
int main()
{
	cin>>n>>m;
	for(long long i=1; i<=n; i++)
	 {
	   scanf("%d",&a[i]);
	   js+=a[i];
	 }
	if(m>js)
	 {
	 	cout<<0;
	 	return 0;
	 }
	long long l=0,r=js,mid=0;
	while(l<=r)
	 {
	 	mid=(l+r)/2;
	 	if(check(mid))
	 	  l=mid+1,ans=max(ans,mid);
	 	else
	 	  r=mid-1;
	 }
	cout<<ans;
	return 0;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页