zoukankan      html  css  js  c++  java
  • poj1064二分法

    题意:给你n根线,现在要把这n根线切割成k根等长(设长为len)的线,问能切得的最长的len为多少,

    结果保留两位小数。

    #include <iostream>
    #define Max 10005
    using namespace std;
    double tlen[Max];
    int calc(double x,int n)//计算当以x长切割时,能切割成多少根线
    {
     int sum=0;
     for(int i=0;i<n;i++)
     {
      sum+=int(tlen[i]/x);
     }
     return sum;
    }
    int main()
    {
     int n,k;
     double mx,mid,sum,ans; 
     while(cin>>n>>k)
     {
      sum=0;
      for (int i=0;i<n;i++)
      {
       scanf("%lf",&tlen[i]);
       if(mx<tlen[i])
        mx=tlen[i];
       sum+=tlen[i];
      }
      
      int flg=0;
      if(sum*100<k)//因为结果保留两位小数,所以最多切割成sum*100根0.01米的线
      {
       cout<<"0.00"<<endl;
      }
      else
      {
       int  left=0,right=mx*100,ss;
       while(right>=left)//二分法
       {
        ss=(left+right)>>1;
        mid=ss/100.0;
        if(calc(mid,n)<k)
        {
         right=ss-1;
        }
        else
         left=ss+1;
       } 
       ans=right/100.0;//这里要仔细想想
        printf("%.2lf\n",ans);
      } 
     
     }
    }

  • 相关阅读:
    Spinlock
    Leetcode: Summary Ranges
    Leetcode: Search a 2D Matrix
    Leetcode: Rotate Image
    Leetcode: Length of Last Word in python
    BBC-unit7 session1
    BBC-unit6 session5
    BBC-unit6 session4
    BBC英语-unit6 session3
    BBC英语-unit6 session2
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2169191.html
Copyright © 2011-2022 走看看