zoukankan      html  css  js  c++  java
  • poj 1328 Radar Installation 贪心

    http://poj.org/problem?id=1328

    X轴的上方代表海,下方代表陆地。海中有多个岛屿,X轴上可任意放置半径为d的雷达,求至少放置多少个雷达可覆盖所有岛屿,不能完成输出-1。
        以岛屿为圆心做半径为d的圆,可在X轴上产生两个交点,即为X轴上可覆盖该岛屿的区间,求出所有岛屿所对应的区间,将交集不为空的区间分为一组,这样你会发现答案其实就是求区间可分为多少组。
    #include<stdio.h>
    #include<stdlib.h>
    #include<algorithm>
    #include<iostream>
    #include<math.h>
    using namespace std;
    struct point
    {
           double x,y;
    }p[1005];
    struct in
    {
          double l,r;
    }q[1005];
    int cmp(in a,in b)
    {
        if(a.l-b.l<-1e-8)
        return 1;
        else
        return 0;
    }
    double dis(point a,point b)
    {
           return sqrt(a.x*a.x+b.y*b.y);
    }
    int main()
    {
        int i,j,ans,n,d,flag,cas=1;
        double x,a,b;
        while(scanf("%d%d",&n,&d),n+d)
        {
             flag=0;ans=1;
             for(i=0;i<n;i++)
             {
                  scanf("%lf%lf",&p[i].x,&p[i].y);
                  if(p[i].y>d)
                  flag=1;
             }
             if(flag)
             {
                  printf("Case %d: -1\n",cas++);
                  continue;
             }
             for(i=0;i<n;i++)
             {
                  q[i].l=p[i].x-sqrt(d*d-p[i].y*p[i].y);
                  q[i].r=sqrt(d*d-p[i].y*p[i].y)+p[i].x;
             }           //求解每个区间。
             sort(q,q+n,cmp);   //每个区间以左端点大小,从小到大排序。
             a=q[0].l;b=q[0].r;
             for(i=1;i<n;i++)
             {
                  if(q[i].l>b)
                  {
                       ans++;
                       a=q[i].l;
                       b=q[i].r;
                  }
                  else if(q[i].l<=b)
                  {
                       a=q[i].l;
                       if(q[i].r<b)
                       b=q[i].r;
                  }
             }
             printf("Case %d: %d\n",cas++,ans);
             
        }
        return 0;
    }
             
             
                  
  • 相关阅读:
    织梦栏目判断 seotitle的小bug
    Python正课32 —— 函数参数的补充
    Python正课31 —— 函数参数的使用
    Python正课30 —— 函数的基本使用
    Python正课29 —— 文件修改
    Python正课28 —— f.seek的应用
    Python正课27 —— 文件高级操作:指针的移动
    Python正课26 —— 文件处理的补充
    javascript 中的时间戳转换时间 根据时间字符判断星期几 根据开始时间结束时间获取中间间隔时间 来自转发
    js获取url参数值的两种方式
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740229.html
Copyright © 2011-2022 走看看