poj1328 贪心

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

神TM贪心。

不懂请自行搜博客。

AC代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
struct Node
{
    double l;
    double r;
} node[2010],temp;
int cmp(Node x,Node y)
{
    return x.l<y.l;
}
int main()
{
    int n,num=0;
    double d,a,b;
    bool flag;
    while( scanf("%d%lf",&n,&d)==2 && (n||d) )
    {
        flag=false;
        for(int i=0; i<n; i++)
        {
            scanf("%lf%lf",&a,&b);
            node[i].l=a-sqrt(d*d-b*b);
            node[i].r=a+sqrt(d*d-b*b);
            if(fabs(b)>d) flag=true;
        }
        if(flag==true) printf("Case %d: -1\n",++num);
        else
        {
            sort(node,node+n,cmp);
            temp=node[0];
            int ans=1;

            for(int i=1; i<n; i++)
            {
                if(node[i].l>temp.r)
                {
                    ans++;
                    temp=node[i];
                }
                else if(node[i].r<temp.r)
                    temp=node[i];
            }
            printf("Case %d: %d\n",++num,ans);
        }
    }
    return 0;
}
时间: 2024-10-21 08:32:55

poj1328 贪心的相关文章

poj1328贪心 雷达,陆地,岛屿问题

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 60381   Accepted: 13610 Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point loca

poj1328贪心中的区间问题

题意:给定海岛个数.雷达半径以及各海岛坐标,求能覆盖所有海岛的最小雷达数. 思路:先对每个海岛求一个区间:即能覆盖它的所有雷达的圆心所构成的区间.然后对区间排序,定义一个最右点over,依次延伸over,如果over不在某个区间内,那么消耗一颗雷达,over更新为该区间的最右端,否则end更新为起点在over内的所有区间的最小右端点. #include <iostream> #include <cstdio> #include <cstring> #include &l

阶段性总结-贪心算法

### 贪心算法总结 ##poj1328> 贪心算法使用点:> 雷达覆盖距离最大为d 的岛屿,也就是以岛屿为圆心,d为半径与海岸线的相交的区间为该雷达的可在范围> 尽可能少的雷达:每个岛屿都有一个上述的圆和一个雷达可在的区间范围,区间范围重叠的岛屿可共用一个雷达 ##poj1700>贪心算法使用点:A:船从right side 返回left side时速度是最快的/次快 > B:船从left side 到right side,再返回,来回的总时间最短这道题需注意 贪心策略有两

贪心Poj1328

题目:http://poj.org/problem?id=1328 注意 输出 Case :这里是有个空格的..和之前序列想法差不多 尽可能 向一边贪心. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

POJ1328 Radar Installation 【贪心&amp;#183;区间选点】

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 54593   Accepted: 12292 Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point loca

poj1328 Radar Installation(贪心)

转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1328 Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in th

poj1328解题报告(贪心、线段交集)

POJ 1328,题目链接http://poj.org/problem?id=1328 题意: 有一海岸线(x轴),一半是陆地(y<0).一半是海(y>0),海上有一些小岛(用坐标点表示P1.P2...),现要在海岸线上建雷达(覆盖半径R).给出所有小岛的位置,和雷达半径,求最少需要多少个雷达? 思路: 1. 知道小岛位置,和雷达半径,那么以小岛为圆心,雷达覆盖半径为半径画圆,可以求出小岛与x轴有0(雷达无法覆盖).1(雷达只能在这个点上才能覆盖).2个交点(雷达在两点之间都能覆盖该小岛) 2

poj1328雷达设置 贪心

Radar Installation Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small island is a point locating in the sea side. And any radar installation, locating on the coasting, can only

贪心-poj1328

http://poj.org/problem?id=1328 求出每个岛屿点在x轴上对应的区间(雷达在此区间内能探测到该岛屿). 将区间按照区间左端升序,然后贪心求出最小的相交区间个数. 坑:y^2爆int,爆long long.用double可过 #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> using namespace std; struct ha