• 雷达


    有n个二维坐标点。

    现在要在x轴上放置若干雷达,每个雷达的辐射半径都是d。

    问至少需要几个雷达,才能够幅射所有点,如果辐射不到所有的点,则输出-1。

    15831619305960.png

    输入

    第一行一个整数n(1 le n le 1000)n(1n1000) 和 d(1 le d le 10000)d(1d10000)。

    接下来n行,每行输入一个点的坐标。

    坐标范围[-10000,10000]。

    输出

    输出一个整数表示答案。

    样例

    输入

    复制
    3 2
    1 2
    -3 1
    2 1

    输出

    复制
    2

    输入

    复制
    1 2
    0 2

    输出

    复制
    1

    提示

    子任务1,20分,1 le n le 101n10 , 1 le d le 101d10,坐标范围[-10,10]。

    子任务2,30分,1 le n le 1001n100 , 1 le d le 1001d100,坐标范围[-100,100]。

    子任务3,50分,1 le n le 10001n1000 , 1 le d le 100001d10000,坐标范围[-10000,10000]。

    #pragma warning(disable:4996)
    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    #include <set>
    #define MAX 1001
    using namespace std;
    
    int main()
    {
        int n, ans = 1;
        bool flag = true;
        double r, x, y;
        scanf("%d%lf", &n, &r);
        std::vector<std::pair<double, double>> range(n);
        for (int i = 0; i < n; i++)
        {
            scanf("%lf%lf", &x, &y);
            if (r < fabs(y))
            {
                flag = false;
            }
            if (!flag)
            {
                continue;
            }
            double delta = sqrt(r * r - y * y);
            range[i] = std::make_pair(x - delta, x + delta);
        }
        if (flag)
        {
            std::sort(range.begin(), range.end(), [](const std::pair<double, double>& a, const std::pair<double, double>& b)->bool
                {
                    if (a.second == b.second)
                    {
                        return a.first < b.first;
                    }
                    return a.second < b.second;
                });
            double endPoint = range.begin()->second;
            for (int i = 0; i < n; i++)
            {
                if (range[i].first > endPoint)
                {
                    ans++;
                    endPoint = range[i].second;
                }
            }
        }
        printf("%d", flag ? ans : -1);
        return 0;
    }
    如果觉得有帮助,点个推荐啦~
  • 相关阅读:
    一看就懂的Mybatis框架入门笔记
    一文了解有趣的位运算(&、|、^、~、>>、<<)
    探究如何永久更改Maven的Dynamic Web Project版本及pom.xml默认配置
    编译流程之仿真
    数字逻辑基础2
    1. FPGA内部的逻辑资源
    c++ 入门之深入探讨拷贝函数和内存分配
    c++入门之浅拷贝和深拷贝
    c++入门之详细探讨类的一些行为
    c++入门之类与内存
  • 原文地址:https://www.cnblogs.com/8023spz/p/15472586.html
Copyright © 2020-2023  润新知