5 条题解

  • 0
    @ 2026-5-30 10:11:21

    #include #include #include

    using namespace std;

    typedef pair<double, double> PDD; const int N = 1010; const double eps = 1e-6, INF = 1e10; // double一般定义一个eps精确值

    int n, R; PDD segs[N];

    int main() { bool success = true;

    cin >> n >> R;
    for(int i = 0; i < n; i++)
    {
        int x, y;
        cin >> x >> y;
        if(y > R)
        {
            success = false;
            break;
        }
        double len = sqrt(R * R - y * y);
        segs[i] = {x + len, x - len}; //区间 按终点起点排序
    }
    if(!success) puts("-1");
    else
    {
        sort(segs, segs + n);
        int res = 0;
        double last = -INF; //***这里要定义double
        for(int i = 0; i < n; i++)
        {
            auto seg = segs[i];
            if(seg.second > last + eps) //seg.second 是起点
            {
                res ++;
                last = seg.first; // seg.first的终点
                
            }
        }
        cout << res << endl;
    }
    return 0;
    

    }

    信息

    ID
    24
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    177
    已通过
    123
    上传者