POJ 1328 Radar Installation
来源:互联网 发布:mac怎么玩魔兽 编辑:程序博客网 时间:2024/05/20 07:17
Radar Installation
Time Limit: 1000MS
Memory Limit: 10000K
Total Submissions: 91342
Accepted: 20438
Description
Assume thecoasting is an infinite straight line. Land is in one side of coasting, sea inthe other. Each small island is a point locating in the sea side. And any radarinstallation, locating on the coasting, can only cover d distance, so an islandin the sea can be covered by a radius installation, if the distance betweenthem is at most d.
We use Cartesian coordinate system, defining the coasting is the x-axis. Thesea side is above x-axis, and the land side below. Given the position of eachisland in the sea, and given the distance of the coverage of the radarinstallation, your task is to write a program to find the minimal number ofradar installations to cover all the islands. Note that the position of anisland is represented by its x-y coordinates.
Figure A Sample Input of Radar Installations
Input
The input consistsof several test cases. The first line of each case contains two integers n(1<=n<=1000) and d, where n is the number of islands in the sea and d isthe distance of coverage of the radar installation. This is followed by n lineseach containing two integers representing the coordinate of the position ofeach island. Then a blank line follows to separate the cases.
The input is terminated by a line containing pair of zeros
Output
For each test caseoutput one line consisting of the test case number followed by the minimalnumber of radar installations needed. "-1" installation means nosolution for that case.
Sample Input
3 2
1 2
-3 1
2 1
1 2
0 2
0 0
Sample Output
Case 1: 2
Case 2: 1
想法:贪心
统计所有岛屿在在x轴上可放置的范围
class island {public:int x, y;double l, r;};isl[i].l = isl[i].x*1.0 - sqrt(d*d - isl[i].y*isl[i].y);isl[i].r = isl[i].x*1.0 + sqrt(d*d - isl[i].y*isl[i].y);
然后更加island.r的大小排序,先设置一个radar在island[0].r处,然后循环比较radar和island[i]更新
for (int i = 0; i<n; i++) {if (isl[i].r == radar)continue;else if (isl[i].l > radar) {radarNum++;radar = isl[i].r;}}
完整代码:
//POJ 1328 Radar Installation#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#define max 1000using namespace std;class island {public:int x, y;double l, r;};bool cmp(island a, island b) {if (a.r == b.r) return a.l<b.l;return a.r<b.r;}int main(int argc, char const *argv[]){freopen("in.txt", "r", stdin);int n, d, c = 1;island isl[max];while (cin >> n >> d &&(n||d)) {int radarNum = 1;bool flag = false;for (int i = 0; i<n; i++) {cin >> isl[i].x >> isl[i].y;if (isl[i].y > d) { flag = true; continue; }isl[i].l = isl[i].x*1.0 - sqrt(d*d - isl[i].y*isl[i].y);isl[i].r = isl[i].x*1.0 + sqrt(d*d - isl[i].y*isl[i].y);}if (flag) { printf("Case %d: -1\n", c++); continue; }sort(isl, isl + n, cmp);double radar = isl[0].r;for (int i = 0; i<n; i++) {if (isl[i].r == radar)continue;else if (isl[i].l > radar) {radarNum++;radar = isl[i].r;}}printf("Case %d: %d\n", c++, radarNum);}return 0;}
- POJ 1328 "Radar Installation"
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- 1328 poj Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- poj 1328 Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- POJ 1328 Radar Installation
- poj 1328 Radar Installation
- POJ-1328-Radar Installation
- poj 1328 Radar Installation
- POJ 1328 Radar Installation
- android图片压缩总结
- Linux的基本操作
- 想靠SEO做营销?光靠排名可不行
- iOS中JS与原生OC互相调用之JavaScriptCore
- Nginx配置多域名代理
- POJ 1328 Radar Installation
- Selenium with Python中文翻译(五)
- hpu 1410 火星情报局 [数学] (哥德巴赫猜想)
- delphi7的程序在英文系统下显示中文乱码
- java读取mysql表的注释及字段注释
- Android Studio导入Eclipse项目工程错误汇总
- java虚拟机
- 蓝月手游iOS客户端技术支持
- Upgrade Solaris X64 with Oracle Support