zoukankan      html  css  js  c++  java
  • POJ1064(二分搜索)解题报告

    原题链接:POJ1064

    题意简述:有N根绳子,它们长度分别为Li。如果从他们中切割出K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留到小数点后俩位。

    解题思路:用二分搜索方法来判断。首先假定一个解,判断其是否可行,不断缩小解的范围,从而得出答案。本题可以使用实数域上的的精度控制(即设置eps判断)或者干脆循环个几百次来逼近精度。

    注意点:

    • printf()保留小数位时四舍五入问题。(有点迷,这个需要仔细考虑)
    • 循环终止条件问题,最终答案是左边界还是右边界?

    代码示例:

    #include<cstdio>
    #include<cmath>
    const int maxn = 11000;
    const double eps = 10e-6;
    double len[maxn];
    int n,k;
    bool C(double size){
    	int cnt = 0;
    	for(int i = 0;i < n;i++)	cnt += len[i]/size;
    	return cnt >= k;
    }
    int main(){
    	scanf("%d%d",&n,&k);
    	for(int i = 0;i < n;i++)	scanf("%lf",&len[i]);
    	double l = 0,r = 3000000;
    	while(l + eps < r){
    		double mid = (l+r)/2;
    		if(C(mid))	l = mid;
    		else r = mid;
    	}
    	printf("%.2f
    ",floor(r*100)/100);
    	return 0;
    }
  • 相关阅读:
    用spring boot 来创建第一个application
    Entily实体类
    ORM
    lambda expression
    Domain logic approochs
    mysql的数据类型(Data type)
    Backup &recovery备份和还原
    spring AOP Capability and goals
    CDI Features
    Tomcat的配置与安装
  • 原文地址:https://www.cnblogs.com/long98/p/10352157.html
Copyright © 2011-2022 走看看