zoukankan      html  css  js  c++  java
  • poj 1064 Cable master (二分)

    题目链接:http://poj.org/problem?id=1064

    题目大意:给你n个绳子,现在需要切割成 k 个相同长度的绳子,精确度到1厘米。找到这k条绳子可以切割成的最大的长度。

    思路:用二分的方法,来搜索可以切割的长度。

    注意:一开始错了很多次,原因是一开始就用了double来存绳子可能切割的长度来进行二分,可能是因为double的精度问题导致最后结果运算错误,换成了int来进行运算,最后再转换为double就可以ac了

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <stack>
    #include <queue>
    #include <cmath>
    #define ll long long
    #define pi 3.1415927
    #define inf 0x3f3f3f3f
    using namespace std;
    double cost[10005];
    int lin(double mid,int n,int k)
    {
        int sum=0,i;
        for(i=0;i<n;++i)
            sum+=cost[i]/mid;
        if(sum>=k)
            return 1;
        return 0;
    }
    
    int main ()
    {
        int n,m,i,t,l,k,r;
        double maxs=0;
        cin>>n>>k;
        for(i=0;i<n;++i)
            scanf("%lf",&cost[i]),cost[i]*=100,maxs=max(cost[i],maxs) ; ///先将绳子长度扩大100倍,使其变为整数
        l=1;r=maxs;
        while(l<=r)
        {
            int mid=(l+r)/2;
            if( lin(mid,n,k) )
                l=mid+1;
            else
                r=mid-1;
        }
            l-=1;
            double j=l/100.0;
            printf("%.2f
    ",j);
    
        return 0;
    }
  • 相关阅读:
    关于《GridView“GridView1”激发了未处理的事件“PageIndexChanging”》的问题!
    励志名言
    Java从入门到精通
    Java学习每天进步一点点
    学**况
    git常用命令
    linux常用命令
    linux yum命令详解
    git分支
    linux常用命令(2)
  • 原文地址:https://www.cnblogs.com/blowhail/p/11966004.html
Copyright © 2011-2022 走看看