zoukankan      html  css  js  c++  java
  • 算法问题实战策略 DARPA大挑战 二分

    地址https://algospot.com/judge/problem/read/DARPA

    解答

    二分选择间隔距离 然后进行尝试分配

    两点之间距离大于等于该尝试距离则放置摄像头。

    根据结果 二分扩展或者缩小距离 直到得到最接近答案的数值

    DOUBLE的二分是有一点区别的 只要两者差小于一定小的数值就可以认为数值相等

    另外double显示上还需要注意些细节。

    // 11235.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    
    #include <iostream>
    #include <memory.h>
    #include <iostream>
    #include <iomanip>
    using namespace std;
    
    /*
    //=======================================
    3
    2 4
    80 100 120 140
    4 4
    80 100 120 140.00
    4 7
    0 70 90 120 200 210 220
    //===========================
    60.00
    20.00
    50.00
    */
    
    int loop = 0;
    
    int n, m;
    
    const int N = 500;
    double arr[N];
    
    double ans = 0.0;
    
    
    bool Check(double mid)
    {
        int count = 1;
        double prevPoint = arr[0];
        for (int i = 1; i < m; i++) {
            if ((arr[i] - prevPoint) - mid > 0.00001) {
                //放置一个摄像机
                count++;
                prevPoint = arr[i];
            }
        }
    
    
        if (count >= n) {
            ans = mid;
            return true;
        }
    
        return false;
    }
    
    
    
    void solve()
    {
        if (n == 2) {
            ans = arr[m - 1] - arr[0];
            cout << fixed << setprecision(2) << ans << endl;
            return;
        }
    
        double l = 0; double r = arr[m - 1] - arr[0];
    
        while (r - l > 0.00001) {
            double mid = (l + r) / 2.0;
            if (Check(mid)) l = mid;
            else r = mid;
        }
        cout << fixed << setprecision(2) << l << endl;
    }
    
    
    int main()
    {
        cin >> loop;
    
        while (loop--) {
            cin >> n >> m;
            memset(arr, 0, sizeof(arr));
            for (int i = 0; i < m; i++) {
                cin >> arr[i];
            }
    
            solve();
        }
    
        return 0;
    }
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    读写ini文件
    优化SQL Server的内存占用之执行缓存
    跨应用程序进行 Forms 身份验证
    MSDN Visual系列:在MOSS中创建一个BDC实体
    Sql Server中利用自定义函数完成单据流水号的设计
    关于string是值类型还是引用类型
    经典算法C#四种排序算法
    用C#实现HTTP协议下的多线程文件传输
    Windows Phone关于 Llistpicker用法
    Hubtile的应用
  • 原文地址:https://www.cnblogs.com/itdef/p/13439411.html
Copyright © 2011-2022 走看看