首页 > 其他分享 >木材加工

木材加工

时间:2022-08-22 20:37:43浏览次数:68  
标签:加工 int max 木材 mid len 木棍 sum

木材加工

思路:二分查找。

从木棍长度的中间分别向两边找,直至找出既满足木棍个数 长度又长的木棍长度。

代码如下:

#include<iostream>

using namespace std;

int n,k;

int len[1000010];

bool check(int mid)//mid为木棍长度

{

      long long sum=0;//sum记录木棍个数

      for(int i=0;i<n;i++)

      {//从第i根原木切出来多少个小段

           sum+=len[i]/mid;

      }

      return sum>=k;//k为想要的木棍个数

}

int main()

{

    cin>>n>>k;

      int max_len=0;//所有原木里最长的那根的长度

      for(int i=0;i<n;i++)

      {

           cin>>len[i];

           if(len[i]>max_len)

             max_len=len[i];

           }   

      int ans=0;

      int left=1;

      int right=max_len;

      while(left<=right)

      {

           int mid=(left+right)/2;

           if(check(mid))

           {

                 ans=mid;

                 left=mid+1;

           }

           else

           right=mid-1;

      }

      cout<<ans<<endl;

      return 0;

}

标签:加工,int,max,木材,mid,len,木棍,sum
From: https://www.cnblogs.com/xdzxyingrui/p/16614135.html

相关文章

  • 木材加工
    我们依次要判断a中的每一个数并计算出能切出多少个mid,还要用一个变量ans储存他们,如果ans分的分数比k多或者正好等于,返回真。如果是小于k,返回假。当f返回的......
  • P2440 木材加工
    P2440木材加工分析:根据题意,先对所有的木材长度进行排序方便二分查找,写一个查找函数,每个木材都除以当前的切割长度(mid),看能切出几段,如果切出的段数大于要求的段数,证明查找......