P1873 洛谷
[COCI 2011/2012 #5] EKO / 砍树
# [COCI 2011/2012 #5] EKO / [砍树]
题目描述
伐木工人 Mirko 需要砍
Mirko 的伐木机工作流程如下:Mirko 设置一个高度参数
Mirko 非常关注生态保护,所以他不会砍掉过多的木材。这也是他尽可能高地设定伐木机锯片的原因。请帮助 Mirko 找到伐木机锯片的最大的整数高度
输入格式
第
第
输出格式
样例 #1
样例输入 #1
4 7
20 15 10 17
样例输出 #1
15
样例 #2
样例输入 #2
5 20
4 42 40 26 46
样例输出 #2
36
提示
对于
题解
#include <stdio.h>
int hights[1000000];
long long f(int n, int N){
long long result = 0;
for(int i=0; i<N; i++)
if(hights[i]-n > 0)
result += hights[i]-n;//砍掉的部分累加
return result;
}
int main(){
int N, M;
scanf("%d%d", &N, &M);
int l = 0, r = 0;
for(int i=0; i<N; i++){
scanf("%d", hights+i);
if(hights[i] > r)
r = hights[i];
}
while(l<r-1){
int mid = (l+r)/2;
long long f_mid = f(mid, N);
if(f_mid < M)//如果此高度截取的木材小于所需,则减少高度增加木材,往左边查找
r = mid;
else//截取长度足够则增加高度
l = mid;
}
printf("%d\n", l);
}