题目
砍树([COCI2011-2012#5] EKO / 砍树 - 洛谷)
题目意思
砍树 用锯片,找到伐木机锯片的最大的整数高度 H,使得他能得到的木材至少为 M米
思路
1.输入数量,长度
2.for循环+if判断找到最大高度
3.二分法找出结果
坑点:
注意得到高度
代码:
#include<cstdio>
long long int n,m,high[1000000+10];
long long int tmp,left,right;
int main()
{
scanf("%lld%lld",&n,&m);//注意读入输出要使用lld
for(long long int i=1;i<=n;i++){
scanf("%lld",&high[i]);
if(high[i]>right){
right=high[i];//找到最大的high[i]做为right
}
}
while(left<=right){
int mid=(left+right)/2;
//printf("%d ",mid);
tmp=0;
for(int i=1;i<=n;i++){
if(high[i]>mid){
tmp+=high[i]-mid;
}
}
if(tmp<m) right=mid-1;
else left=mid+1;
}
printf("%lld",right);//输出最终结果
return 0;//不加return 0 结果return WA;
}