poj 1328

题意:给你一个二维坐标,y轴上是海,y轴下是陆地,然后给你一些在海上的小岛,然后有一种半径为d圆形雷达,圆心只在x轴上,问最少需要多少个雷达能覆盖所有小岛。

我开始的思路:我先以x轴从左到右排序,然后以最左边的小岛建立雷达(假设坐标为x,y),第一个雷达的圆心是(x+sqrt(d*d+y*y));然后判断下一个点是否在这个圆内,不在的话就重新以这个小岛更新一个圆心然后计数器+1;但是WA了2次,思路的话也不知道错在哪里;

最后看了别的大牛的思路;说是区间覆盖问题;看代码理解吧

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 int n,d;
 8 struct coord{
 9     double left,right;
10 }p[2015],temp;
11 bool operator < (coord a,coord b){
12     return a.left < b.left;
13 }
14 int main()
15 {
16     int n,d,t=0;
17     while(cin >> n >> d&&(n||d)){
18         int flag=1;
19         for(int i=0;i<n;++i){
20             double a,b;
21             cin >> a >> b;
22             if(fabs(b)>d)    flag=0;
23             else{
24                 double c=sqrt(d*d-b*b);
25                 p[i].left=a*1.0-c;p[i].right=a*1.0+c;
26             }
27         }
28         cout << "Case " << ++t << ": ";
29         if(!flag)    cout << -1 << endl;
30         else{
31             int count=1;
32             sort(p,p+n);temp=p[0];
33             for(int i=1;i<n;++i){
34                 if(p[i].left>temp.right){        //不重叠的话就要开始找新圆了
35                     ++count;temp=p[i];
36                 }
37                 else if(p[i].right<temp.right)        //更新最小的左边的点;
38                     temp=p[i];
39             }
40             cout << count << endl;
41         }
42     }
43 }

好不容易看懂了题意,可惜做不出来;

好弱好弱阿、

时间: 2024-10-06 07:54:47

poj 1328的相关文章

Poj 1328(雷达安装)几何+贪心

[题目描述]: 给定n个小岛以及这些小岛的位置,并输入雷达的辐射面积,问最少需要多少个雷达站才能覆盖所有小岛? [思路分析]: 本题首先想到的是运用贪心算法,但是算法想到了如何贪心?这道题我自己开始做之时只有一点思路,就是让每一个雷达覆盖较多的点,但是如何较多覆盖,这就是典型的数学问题了,自己没有思索出来,最后在网上看了题解才明白如何做.下面我们看看如何建图: 我们通过这个图首先运用了一个数学知识,就是以小岛为圆心,雷达辐射范围为圆心建立一个圆,该圆与x轴有一个交点,以该交点作为雷达站铺设点那么

POJ 1328、Radar Installation 贪心

jQuery的属性操作非常简单,下面以一个a元素来说明属性的获取/设置/删除操作 <body> <a>jquery.com</a> </body> 添加属性 $('a').attr('href', 'http://www.jquery.com') 添加多个属性 $('a').attr({'href':'http://www.jquery.com', 'title':'jquery.com'}) 获取属性 $('a').attr('href') class属性

[2016-02-04][POJ][1328][Radar Installation]

[2016-02-04][POJ][1328][Radar Installation] Radar Installation Time Limit: 1000MS Memory Limit: 10000KB 64bit IO Format: %I64d & %I64u Submit Status Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in

POJ 1328:Radar Installation

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50843   Accepted: 11415 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

POJ 1328 Radar Installation 贪心题解

本题是贪心法题解,不过需要自己观察出规律,这就不容易了,很容易出错. 一般网上做法是找区间的方法. 这里给出一个独特的方法: 1 按照x轴大小排序 2 从最左边的点循环,首先找到最小x轴的圆 3 以这个圆判断可以包括右边的多少个圆,直到不可以包括下一个点,那么继续第2步,画一个新圆. 看代码吧,应该很清晰直观的了. 效率是O(n),虽然有嵌套循环,但是下标没有重复,一遍循环就可以了,故此是O(n). #include <stdio.h> #include <cmath> #incl

Poj 1328 Radar Installation 贪心

题目链接:http://poj.org/problem?id=1328 Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52768   Accepted: 11867 Description Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the othe

[ACM] POJ 1328 Radar Installation (贪心,区间选点问题)

Radar Installation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 51131   Accepted: 11481 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

POJ 1328 Radar Installation 雷达安装 贪心问题求解

题目链接: POJ 1328 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 coas

POJ 1328 Radar Installation

http://poj.org/problem?id=1328 //第一次:从左边第一个未被覆盖的island开始 -->>失败 因为还有y坐标这一因素 不能保证贪心//第二次:找两个点 确定一个圆 ----->>>其实早就应该发现错误 漏洞百出 不具有普遍性//从左边第一个未覆盖的点作为基点 找到第一个 y坐标>=的点(如果没有找到) 做这两个点的公共圆//如果不能做这两个点的公共圆 或者 没有y>=的点 那么做这个圆的右极限圆//更新覆盖的点//蠢-->&

POJ 1328 Radar Installation(贪心)

http://poj.org/problem?id=1328 题意: 假设滑行是无限直线.土地在海岸的一边,海在另一边.每个小岛是位于海边的一个点.位于海岸上的任何雷达装置只能覆盖距离,所以如果两者之间的距离最大为d,则海中的岛屿可以被半径装置覆盖. 我们使用笛卡尔坐标系,定义惯性是x轴.海侧在x轴之上,陆侧在下.考虑到每个岛屿在海洋中的位置,并且考虑到雷达装置的覆盖距离,您的任务是编写一个程序,以找到覆盖所有岛屿的最少数量的雷达装置.注意,岛的位置由其xy坐标表示. 思路: 由于雷达只能处于x