zoukankan      html  css  js  c++  java
  • POJ 1064 Cable master(二分法寻找最优解)

    思路:

    1.题意是找到一个长度,可以使所给的绳子能切割成k个这样长度的绳子,最小精度是厘米;
    2.方法就是二分查找,每次比较此次的mid值是否符合题意;
    3.因为使用double我们无法用left<=right终止循环,那就循环足够多的次数来提高精度即可;
    4.最后输出不可以直接使用.2f,因为会四舍五入;

    代码:

    #include<iostream>
    #include<cmath>
    using namespace std;
    const int MAX_N=1e4+99;
    const double INF=1e7;
    int n,k;
    double cab[MAX_N];
    bool ok(double m){
    	int ans=0;
    	for(int i=0;i<n;i++) ans+=(int)(cab[i]/m);
    	return ans>=k;
    }
    int main(){
    	scanf("%d%d",&n,&k);
    	for(int i=0;i<n;i++) scanf("%lf",cab+i);
    	double l=0,r=INF;
    	for(int i=0;i<100;i++){
    		double mid=(l+r)/2;
    		if(ok(mid)) l=mid;
    		else r=mid;
    	}
    	printf("%.2f",floor(l*100)/100);
    	return 0;
    }
    
  • 相关阅读:
    CodeForces 242E二维线段树
    树形DP
    014 国际化
    013 属性文件
    012 BeanPostProcessor
    011 aware
    010 依赖注入
    009 IOC--初始化和销毁
    008 IOC--Bean的作用域
    007 IOC---Resource
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308783.html
Copyright © 2011-2022 走看看