Poj 1328

来源:互联网 发布:openwrt 网络设置 编辑:程序博客网 时间:2024/06/07 05:55



#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;int n;double d;typedef struct Postion{    double left, right;};bool cmp(Postion p1, Postion p2){    if((p1.left < p2.left) || (p1.left == p2.left && p1.right < p2.right))    //if(p1.left < p2.left)        return true;    else        return false;}Postion Pos[1010];void solve(){    Postion temp;    temp = Pos[0];    int ans = 1; //   for(int i = 0; i < n; i++)  //      cout << Pos[i].left << " " << Pos[i].right << endl;    for(int i = 1; i < n; i++)    {        if(Pos[i].left > temp.right)        {            temp = Pos[i];            ans++;        }        else if(Pos[i].right < temp.right)        {            temp = Pos[i];        }    }    cout << ans << endl;}/*void solve(){    int ans = 1;    int index = 0;    double Right = Pos[0].right;    while(Right < Pos[n-1].left)    {        while(Pos[index].left <= Right)        {            if(Pos[index].right < Right)                Right = Pos[index].right;            index++;        }        ans++;        Right = Pos[index].right;    }    cout << ans << endl;    cout << endl;}*/int main(){    int kase = 0;    while(scanf("%d %lf", &n, &d) && n && d)    {        bool flag = true;        for(int i = 0; i < n; i++)        {            double x, y;            scanf("%lf %lf", &x, &y);            if(fabs(y) > d)                flag = false;            //cout << fabs(y) << " " << d << endl;            double len = sqrt(d*d - (y*y));            Pos[i].left = x - len;            Pos[i].right = x + len;        }        sort(Pos, Pos+n, cmp);        cout << "Case " << ++kase << ": ";        if(flag) solve();        else cout << "-1" << endl;    }    return 0;}