读书人

UVALive 2519 Radar Installation 雷达

发布时间: 2013-09-10 13:42:18 作者: rapoo

UVALive 2519 Radar Installation 雷达扫描 区间选点问题

题意:在坐标轴中给出n个岛屿的坐标,以及雷达的扫描距离,要求在y=0线上放尽量少的雷达能够覆盖全部岛屿。

很明显的区间选点问题。

代码:

/**  Author:      illuz <iilluzen[at]gmail.com>*  Blog:        http://blog.csdn.net/hcbbt*  File:        l2911.cpp*  Create Date: 2013-09-09 20:51:05*  Descripton:   */#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;const int MAXN = 1010;int n, r, cas = 1;struct Point {double lhs, rhs;} a[MAXN];bool cmp(Point a, Point b) {if (a.rhs != b.rhs)return a.rhs < b.rhs;return a.lhs > b.lhs;}int main() {int x, y;bool flag;while (scanf("%d%d", &n, &r) && (n || r)) {flag = true;memset(a, 0, sizeof(a));for (int i = 0; i < n; i++) {scanf("%d%d", &x, &y);if (flag) {if (y > r) {flag = false;continue;}double t = sqrt((double)r * r - y * y);a[i].lhs = x - t;a[i].rhs = x + t;}}printf("Case %d: ", cas++);if (!flag)printf("-1\n");else {sort(a, a + n, cmp);//for (int i = 0; i < n; i++)//printf("%lf %lf\n", a[i].lhs, a[i].rhs);int ans = 1;double start = a[0].rhs;for (int i = 1; i < n; i++) {if (a[i].lhs - start <= 1e-4)continue;ans++;start = a[i].rhs;}printf("%d\n", ans);}}return 0;}


读书人网 >编程

热点推荐