算法问题实战策略 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
复制代码

 

posted on   itdef  阅读(144)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示