您的位置:首页 > 其它

南阳理工OJ_题目12 喷水装置(二)

2014-05-02 23:13 225 查看
#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

int cmp(const void *a, const void *b);

struct data
{
    double l;
    double r;
};

int main()
{
    int T;
    int n, h, w;
    data a[10010];
    cin >> T;
    while(T--)
    {
        int x, r;
        //int k = 0;
        cin >> n >> w >> h;
        for(int i = 1; i <= n; i++)
        {
            cin >> x >> r;
            if(2*r <= h)
                a[i].l = a[i].r = x;
            else
            {
                //k++;
                a[i].l = x - sqrt(r*r - h*h/4.0);
                a[i].r = x + sqrt(r*r - h*h/4.0);
                //if(a[k].l < 0)
                    //a[k].l = 0;
                //if(a[k].r >w)
                    //a[k].r = w;
            }
        }

        int flag = 1;
        double cur = 0;
        int sum = 0;
        qsort(a+1, n, sizeof(a[0]), cmp);

        while(cur < w)
        {
            double t = cur;
            for(int i = 1; i <= n && cur >= a[i].l; i++)
            {
                t = t > a[i].r ? t : a[i].r;
            }
            if(cur == t)
            {
                flag = 0;
                break;
            }
            else
            {
                cur = t;
                sum++;
            }
        }

        if(flag == 1)
            cout << sum << endl;
        else
            cout << 0 << endl;
    }
}

int cmp(const void *a, const void *b)
{
    if( ((data *)a)->l > ((data *)b)->l )
        return 1;
    else
        return -1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: