poj1328 雷达安装

雷达安装

poj1328

以岛屿为圆心,雷达范围为半径,计算此圆与x轴交点的线段,以此把所有岛屿的区间计算出来。

因此,这道题就变成了在数轴上选最少的点,覆盖给定线段。

把每条线段以右端点排序,然后进行选择即可。

sqrt函数使用时要保证数据类型一致。

注意输出格式以及Case的C要大写= =

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

struct radarRange {
double left;
double right;
bool operator < (const radarRange &x) const //<重载,用于sort函数
{
if (right != x.right) return right < x.right;
return left < x.left;
}
};

struct islandPosition {
int x;
int y;
};

int radar()
{
int n, d;
cin >> n >> d;
if (n == 0 && d == 0)
return -2;

islandPosition *p = new islandPosition[n];
radarRange *r = new radarRange[n];

for (int i = 0; i < n; i++)
{
cin >> p[i].x >> p[i].y;
}

if (d == 0)
return -1;

for (int i = 0; i < n; i++)
if (p[i].y > d)
{
return -1;
}

for (int i = 0; i < n; i++)//计算雷达安装范围
{
double tmp = sqrt(double(d *d) - double(p[i].y * p[i].y));
r[i].left = p[i].x - tmp;
r[i].right = p[i].x + tmp;
}

//for (int i = 0; i < n; i++)//debug
//{
// cout << r[i].left << ' ' << r[i].right << endl;
//}
sort(r, r + n);
//for (int i = 0; i < n; i++)//debug
//{
// cout << r[i].left << ' ' << r[i].right << endl;
//}
double start, end;
int sum = 1;
start = r[0].left;
end = r[0].right;
for (int i = 1; i < n; i++)//计算所需雷达数
{
if (r[i].left <= end && r[i].left >= start)
{
start = r[i].left;
}
/*if (r[i].left <= end && r[i].left < start)
{
;
}*/
if (r[i].left > end)
{
start = r[i].left;
end = r[i].right;
sum++;
}
}
delete[] p; delete[] r;
return sum;
}

int main()
{
int tmp;
int sum = 1;
while (1)
{
tmp = radar();
if (tmp == -2) break;
cout << "Case " << sum++ << ": " << tmp << endl;
}

system("pause");
}

/*
Sample Input

3 2
1 2
-3 1
2 1

1 2
0 2

0 0
Sample Output

Case 1: 2
Case 2: 1
*/

poj1328 雷达安装
https://xzsk2.github.io/2018/1328/
作者
Sakari
发布于
2018年5月7日
许可协议