• 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;
    }
  • 相关阅读:
    记一次在线阅卷系统设计开发总结
    卡座录音经验汇总
    TEAC 6030S 统调
    空白磁带SONY TDK 万胜,3大品牌空白磁带,入门必读
    cnetos 7 mysql 从data还原数据库
    java的BigDecimal比较大小
    nginx配置静态访问txt文件
    小程序筛选
    买分产整合
    开窗函数
  • 原文地址:https://www.cnblogs.com/long98/p/10352157.html
Copyright © 2020-2023  润新知