nyist 287 Redar

题大意:

给你n 和r;r表示最大半径不能超过这个数

后面给定n个点的坐标,y 大于零,

输出如果不能全部覆盖输出  -1 

一开始还以为只要有一个满足就输出-1  结果我错了

这是一道区间选点问题

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=1010;
typedef struct x_y
{
    double x,y;
}X_Y;
X_Y a[N];
int fun(X_Y a,X_Y b)
{
    if(a.x<b.x) return 1;
    else return 0;
}
int main()
{
    int n,r;
    int t = 1;
    while(1)
    {
        double b[N];
        cin>>n>>r;
        if(n==0&&r==0)  break;
        double x1;
        int i,count=1;
        for( i = 0; i < n; i++)
        {
        cin>>x1>>b[i];
        double len = sqrt((r*r)-(b[i]*b[i]));
        a[i].x = x1 - len;
        a[i].y = x1 + len;
        }
        int flag = 1;
        for( i = 0; i < n; i++)
           if(b[i] > r)
           {
              cout<<"Case "<<t<<": -1\n";
               flag = 0;
               break;
           }

        if(flag)
        {
            sort(a,a+n,fun);
            double yy = a[0].y;
            for( i = 1; i < n; i++ )
                if(a[i].x>yy)
                {
                   count++;
                    yy = a[i].y;
                }
                else
                {
                    if(a[i].y<yy)
                       yy = a[i].y;
                }
                cout<<"Case "<<t<<": "<<count<<"\n";
        }
        t++;

    }
    return 0;

}

原文地址:https://www.cnblogs.com/yyroom/p/2789768.html