• poj1064 Cable master


    /*
      注意这题比较特殊,求每条绳子的长度的时候,不会去四舍五入,确切说,是只会四舍,绝不五入...否则的话,最终还是不能达到K条的总数
      
      这题对数据的处理要比较敏感,必须意识到,哪怕是保留两位小数,第三位小数,也是向下取整,绝对不可进位
      想明白这点以后,cmath头文件中的floor函数,就理所当然应该用了
    */
    #include <iostream>
    #include <iomanip> 
    #include <cmath> 
    using namespace std;
    const int MAX_N = 1e4 + 10;
    double L[MAX_N];
    int N, K;
    const double INF = 0x3f3f3f3f;
    
    // 判断是否满足条件 
    bool C(double x)
    {
    	int num = 0;
    	for (int i = 0; i < N; i++)
    	num += (int)(L[i] / x);
    	return num >= K;
    }
    
    void solve()
    {
    	// 初始化解的范围
    	double lb = 0, ub = INF;
    	
    	// 重复循环,直到解的范围足够小
    	for (int i = 0; i < 100; i++)
    	{
    		double mid = (lb + ub) / 2;
    		if (C(mid)) lb = mid;
    		else ub = mid;
    	} 
    //	cout << fixed << setprecision(2) << ub << endl; 
    	cout << fixed << setprecision(2) << floor(ub * 100) / 100 << endl;
    }
    int main()
    {
    	cin >> N >> K;
    	for (int i = 0; i < N; i++) cin >> L[i];
    	solve();
    	return 0;
    }

  • 相关阅读:
    HDU 1068
    hdu6447
    HDU 6438
    网络赛的个人反思总结
    Bellman-ford 模板
    Pairs Forming LCM LightOJ
    POJ
    链式前向星
    POJ 3281 Dining
    游标遍历所有数据库循环执行修改数据库的sql命令
  • 原文地址:https://www.cnblogs.com/mofushaohua/p/7789518.html
Copyright © 2020-2023  润新知