POJ 1328 Radar Installation 贪心算法
2011-07-30 16:22
316 查看
题目:http://poj.org/problem?id=1328
题目大意:在一个无线长的直线的海岸线上,海岸线上边是岛屿,在海岸线上放雷达,雷达的辐射范围是D,问至少放几个雷达可以覆盖所有的塔。
分析:如下图所示,针对一个点,她的雷达的位置范围如下,因此我们按照x对所有的岛屿点进行排列,如果每个岛屿的圆心有重合,那么他们可以用一个雷达所覆盖,如果不能我们需要重新设置一个新的雷达,雷达的位置范围为新的点的范围。
代码如下:
题目大意:在一个无线长的直线的海岸线上,海岸线上边是岛屿,在海岸线上放雷达,雷达的辐射范围是D,问至少放几个雷达可以覆盖所有的塔。
分析:如下图所示,针对一个点,她的雷达的位置范围如下,因此我们按照x对所有的岛屿点进行排列,如果每个岛屿的圆心有重合,那么他们可以用一个雷达所覆盖,如果不能我们需要重新设置一个新的雷达,雷达的位置范围为新的点的范围。
代码如下:
#include<stdio.h> #include <math.h> #define ONLINE #define max(a,b) (a)>(b)?(a):(b) #define min(a,b) (a)<(b)?(a):(b) void online() { #ifdef ONLINE #else freopen("1328.in","r", stdin); freopen("1328.out","w", stdout); #endif } int n, d; int cas = 1; const int SIZE = 1001; int point[SIZE][2]; double range[SIZE][2]; int result; int calrange() { //排序 for (int i=0; i<n; i ++) { for(int j=i+1; j < n; j ++) { if (point[i][0] > point[j][0]) { int x = point[i][0]; int y = point[i][1]; point[i][0] = point[j][0]; point[i][1] = point[j][1]; point[j][0] = x; point[j][1] = y; }//end if }//end for j }//end for i for (int i=0; i < n; i ++) { if(point[i][1] > d) return -1; double r = sqrt((double)(d * d - point[i][1] * point[i][1])); range[i][0] = point[i][0] - r; range[i][1] = point[i][0] + r; } } void calresult() { double x = range[0][0]; double y = range[0][1]; result = 1; for (int i = 1; i < n; i ++) { if (range[i][0]<= y && range[i][1] >= x) { x = max(x, range[i][0]); y = min(y, range[i][1]); } else { result ++; x = range[i][0]; y = range[i][1]; }//end else }//end for } void read() { while (scanf("%d%d", &n, &d)!=EOF && n != 0 && d != 0) { for(int i=0; i < n; i ++) scanf("%d%d", &point[i][0], &point[i][1]); result = 0; if (calrange() == -1) { printf("Case %d: %d\n", cas, -1); } else { calresult(); printf("Case %d: %d\n", cas, result); } cas ++; }//end while } int main() { online(); read(); return 0; }运行结果如下:
1328 | Accepted | 200K | 32MS | C++ | 1663B | 2011-07-30 16:07:54 |
相关文章推荐
- POJ1328 贪心算法
- POJ 1328 贪心算法
- POJ 1328 Radar Installation 贪心算法
- POJ 1328 简单贪心算法
- poj 1328 贪心算法和快排(快排细节)
- POJ 1328 Radar Installation - 贪心算法
- poj 1328 贪心算法的深入剖析
- POJ-1328 Radar Installation-贪心算法
- POJ-1328(贪心算法)
- 【贪心算法】POJ-1328 区间问题
- poj 1328 Radar Installation(贪心算法)
- (Relax 1.6)POJ 1328 Radar Installation(利用数据有序化进行贪心选择)
- POJ 1328 Radar Installation
- poj 贪心相关之1328 Radar Installation
- POJ 1328 Radar Installation【贪心 区间问题】
- Radar Installation(POJ--1328
- POJ 1328 Radar Installation(贪心+区间覆盖)
- POJ 1328 Radar Installation 贪心区间选点
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation (贪心)