UVA 1193 (区间覆盖(贪心))
来源:互联网 发布:网络叫人 编辑:程序博客网 时间:2024/06/13 10:48
题意是:在直角坐标系中,x方向是海岸线,x轴上方是岛屿,问至少有又多少个雷达才能把所有岛屿影响到,这题有个坑,输出-1时有几种情况:1.d<0 2.y<0 3.y>d,我们可以把每个岛屿的位置和d通过直角转换成x轴方向的点,然后题目就变成区间覆盖问题了
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 coasting, can only coverd distance, so an island in the sea can be covered by a radius installation, if the distance between them is at mostd .
We use Cartesian coordinate system, defining the coasting is the x -axis. The sea side is above x -axis, and the land side below. Given the position of each island in the sea, and given the distance of the coverage of the radar installation, your task is to write a program to find the minimal number of radar installations to cover all the islands. Note that the position of an island is represented by itsx - y coordinates.
Input
The input consists of several test cases. The first line of each case contains two integersn(1n1000) and d , where n is the number of islands in the sea andd is the distance of coverage of the radar installation. This is followed byn lines each containing two integers representing the coordinate of the position of each 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 case output one line consisting of the test case number followed by the minimal number of radar installations needed. `-1' installation means no solution for that case.
Sample Input
3 21 2-3 12 11 20 20 0
Sample Output
Case 1: 2Case 2: 1AC代码:
#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<queue>#include<map>#include<set>#define INF 999999999#define LL long long#define mod 1000003using namespace std;struct node{double zuo, you;};node po[1005];int cmp(node a, node b){return a.zuo < b.zuo;}int main(){int n, d;int cnt = 0;while (scanf("%d%d", &n, &d)&&n&&d){int f = 0;double x, y;for (int i = 0; i < n; i++){scanf("%lf%lf", &x, &y);if (y > d||y<0||d<0)f = 1;else{//转化为区间int xx = int(sqrt(d*d - y*y));po[i].zuo = x - xx, po[i].you = x + xx;}}printf("Case %d: ", ++cnt);if (f){printf("-1\n");continue;}int ans = 1;sort(po, po + n, cmp);int xx = po[0].you;for (int i = 1; i < n; i++){if (po[i].zuo > xx){ans++;xx = po[i].you;}else if (po[i].zuo < xx&&po[i].you < xx){xx = po[i].you;}}printf("%d\n", ans);}}
- UVA 1193 (区间覆盖(贪心))
- UVA 10382 贪心(区间覆盖)
- uva 10382区间覆盖贪心
- UVA 10020 - Minimal coverage (贪心) 区间覆盖问题
- UVA 10020 Minimal coverage(贪心 + 区间覆盖问题)
- UVA 10382 Watering Grass (贪心 + 区间覆盖问题)
- uva 10382 Watering Grass(贪心-区间覆盖变形)
- UVa 10382 - Watering Grass(贪心算法,区间覆盖问题)
- UVa 10020 - Minimal coverage(区间覆盖、贪心)
- uva 10020- Minimal coverage (贪心思想 简单区间覆盖)
- UVa 10382 - Watering Grass(贪心+区间覆盖问题)
- UVA 10200 Minimal coverage (区间覆盖贪心)
- uva 10382 Watering Grass(贪心-区间覆盖变形)
- UVa 10020 Minimal coverage (贪心&区间覆盖)
- UVA - 10382 Watering Grass 贪心+区间覆盖
- uva 10020 Minimal coverage(贪心,区间覆盖)
- uva 10382 贪心 区间覆盖问题
- 区间覆盖问题(贪心)
- Java学习之线程锁--单例模式写法--synchronized
- iOS 第三方框架- AFNetworking的基本使用
- StrictMode使用详解,strictmode
- DatePicker && TimePicker 【Android】
- 一段简单的代码,实现iOS源生播放器,在线播放视频
- UVA 1193 (区间覆盖(贪心))
- LeakCanary让Android内存泄漏无处遁形
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- 5-29 删除字符串中的子串 (20分)
- 独立游戏大电影 原名(Indie.Game)
- 生活随笔:上架第二本电子书
- centos7下安装mysql
- JQuery重命名库名
- 知识点