其他分享
首页 > 其他分享> > 切绳子

切绳子

作者:互联网

切绳子

思路:运用二分查找,与木材加工题的思路相同。

只是这个是针对浮点数的,多了将绳子长度转化为整形,最后输出再转回高精度。

代码如下:

#include<iostream>

using namespace std;

int n,k;

int len[1000010];

bool check(int 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++)

      {

           double x;

           cin>>x;

           len[i]=(int)(x*100); //将长度扩大100倍,转化为整形

           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;//大了往左边找

      }

      printf("%.2lf",ans/100.0);//转化为高精度

      return 0;

}

标签:int,max,sum,绳子,mid,len
来源: https://www.cnblogs.com/xdzxyingrui/p/16614396.html