40分求助
查看原帖
40分求助
1165831
zuilp楼主2023/12/25 20:51
#include<stdio.h>
int many(int tree[],int b,int m)
{
	int i,c=0;
	for(i=0;i<m;i++)
	{
		if(tree[i]>b)
		c+=tree[i]-b;
	}
	return c;
 } //计算某高度下锯得木材长度
 int main()
 {
 	int n,need,i;
 	scanf("%d %d",&n,&need);
 	int tree[n];
 	for(i=0;i<n;i++)
 	scanf("%d",&tree[i]);
 	int l=0,r=0;
 	for(i=0;i<n;i++)
 	{
 	if(tree[i]>r)	
 	r=tree[i];	
	 }
 	while(r>l)
 	{
 		if(many(tree,(l+r)/2,n)>need)
 		l=1+(l+r)/2;
 		else if(many(tree,(l+r)/2,n)<need)
 		r=(l+r)/2-1;
 		else
 		break;
	 }
 printf("%d",(l+r)/2);
 }	

按照题解先二分,再算数的思路写的

2023/12/25 20:51
加载中...