SDAU 贪心专题 11 雷达
来源:互联网 发布:php exec函数返回值 编辑:程序博客网 时间:2024/04/28 14:14
1:问题描述
Problem 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 cover d distance, so an island in the sea can be covered by a radius installation, if the distance between them is at most d.
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 its x-y coordinates.
Figure A Sample Input of Radar Installations
Input
The input consists of 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 is the distance of coverage of the radar installation. This is followed by n 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 2
1 2
-3 1
2 1
1 2
0 2
0 0
Sample Output
Case 1: 2
Case 2: 1
2:大致题意
x轴的上方是海,下方是陆地。海中有小岛,现在给你小岛的坐标,要在x轴上建立雷达,让雷达覆盖住小岛。求出需要最少的雷达数。
3:思路
我们可以设小岛的坐标为(x,y)。圆心为(a,0)。雷达范围的半径为d,那么我们就可以得到表达式:
(x-a)*(x-a)+y*y=d*d。
可以得到:
x-sqrt(d*d-y*y)小于a
x+sqrt(d*d-y*y)大于a
这里需要注意的是 有可能会出现y>d的情况。要特殊考虑。
得到a的区间之后按照左端点从小到大排列。再根据重叠情况判断最少需要的雷达数即可。
4:感想
这个题的原始表达式好像和豆豆不太一样,不过最终的结果是一样的哎。
找到关系式这个题就挺容易解决的。
5:ac代码
#include <cstdio>#include<iostream>#include<stdio.h>#include<vector>#include<algorithm>#include<numeric>#include<math.h>#include<string.h>#include<map>#include<set>#include<vector>using namespace std;struct dao{ double left; double right;};bool cmp(const dao &a,const dao &b){ if(a.left<=b.left) return true; return false;}int main(){ dao ww[1000]; int n,d,i,l; int x,y,t,k,e=1; double L,R,a; while(cin>>n>>d&&n!=0||d!=0) { t=1;l=1; for(i=0;i<n;i++) { cin>>x>>y; if(d>=y&&l) { ww[i].left=x-sqrt(d*d-y*y); ww[i].right=x+sqrt(d*d-y*y); } else l=0; } if(!l) { cout<<"Case "<<e++<<": -1"<<endl; continue; } sort(ww,ww+n,cmp); R=ww[0].right; for(k=1;k<n;k++) { if(ww[k].left>R) { t++; R=ww[k].right; } else if(ww[k].right<=R) { R=ww[k].right; } } cout<<"Case "<<e<<": "<<t<<endl; e++; } return 0;}
- SDAU 贪心专题 11 雷达
- SDAU 贪心专题 总结
- SDAU 贪心专题 16 中位数
- SDAU贪心专题 06 电梯
- SDAU 贪心专题 01 小木棍
- SDAU 贪心专题 00 搬桌子
- SDAU 贪心专题 17 小箱子
- SDAU 贪心专题 02 田忌赛马
- SDAU 贪心专题 04 节目安排
- SDAU 贪心专题 05 换硬币
- SDAU 贪心专题 07 赛跑问题
- SDAU 贪心专题 10 颜料问题
- SDAU 贪心专题 12 根号问题
- SDAU 贪心专题 13 盈利问题
- SDAU 贪心专题 15 牛奶问题
- SDAU 贪心专题 14 小船过河
- SDAU 搜索专题 11 Oil Deposits
- SDAU 搜索专题 总结
- Servlet 简记
- 十天学会web标准(DIV+CSS)系列(五)超链接伪类
- 【源代码】关于D_S证据理论和可信度的计算
- [LeetCode][二叉树]Invert Binary Tree
- Android Studio中集成fresco,解决冲突的问题。
- SDAU 贪心专题 11 雷达
- MFC六大关键技术
- Android Studio:Error:(23, 17) Failed to resolve: junit:junit:4.12
- 留言板
- NOI 26:n-gram串频统计
- iOS-swift-AFNetworking使用事例
- Window10安装Redis数据库
- Remove Duplicates from Sorted List
- 如何将js中的值传到后台action中