ACM-二分贪心R-18
2017-05-03 16:28
232 查看
(欢迎阅读我的博客,如发现错误或有建议请评论留言,谢谢。)
题目如下:
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
Sample Output
题目思路:
在海边建立雷达将每个海上的点覆盖到,问需要至少几个雷达才能实现,我们可以把每个点雷达可以放置的范围求出来(左右两个边界),然后再判断需要的雷达数,
有几个情况是不可能实现的:1.雷达覆盖半径小于点到海边的距离,2.雷达覆盖半径小于等于零,3.点到海边距离小于零。
代码如下:
题目如下:
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
题目思路:
在海边建立雷达将每个海上的点覆盖到,问需要至少几个雷达才能实现,我们可以把每个点雷达可以放置的范围求出来(左右两个边界),然后再判断需要的雷达数,
有几个情况是不可能实现的:1.雷达覆盖半径小于点到海边的距离,2.雷达覆盖半径小于等于零,3.点到海边距离小于零。
代码如下:
#include<iostream> #include<cmath> #include<algorithm> struct fun { double x; double y; }a[1001]; struct funs { double left; double right; }b[1001]; int cmp(funs a,funs b) { return a.left<b.left; } using namespace std; int i,n,d,k,m,w,sum; double tmp,q,e; int main() { w=1; while(cin>>n>>d) { if(n==0&&d==0)break; sum=1; for(i=0;i<n;i++) { cin>>q>>e; a[i].x=q; a[i].y=e; b[i].left=a[i].x-sqrt(d*d-a[i].y*a[i].y); b[i].right=a[i].x+sqrt(d*d-a[i].y*a[i].y); if(a[i].y>d||d<=0||a[i].y<0)sum=-1; } sort(b,b+n,cmp); tmp=b[0].right; if(sum!=-1) { for(i=1;i<n;i++) { if(tmp<b[i].left) { sum++; tmp=b[i].right; } else if(tmp>b[i].right) tmp=b[i].right; } } cout<<"Case "<<w++<<": "<<sum<<endl; } }
相关文章推荐
- ACM-二分贪心D-04
- POJ 1727 Advanced Causal Measurements (ACM) (二分+贪心)
- ACM-二分贪心E-05
- ACM-二分贪心F-06
- ACM-二分贪心T-20
- 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest F. Gourmet and Banquet(贪心+二分)
- ACM-二分贪心U-21
- ACM-二分贪心X-24
- HDU 5515 (ACM 2015 沈阳) Game of Flying Circus [贪心+二分]
- POJ 1727 Advanced Causal Measurements (ACM)(二分+贪心)
- ACM 贪心 STL multiset 二分查找 hdu4268
- 2016-2017 ACM-ICPC CHINA-Final Ice Cream Tower 二分+贪心
- ACM-二分贪心B-02
- lightoj.1048.Conquering Keokradong(二分 + 贪心)
- ACM--木头序列--贪心+递减子序列--HDOJ 1051--Wooden Sticks
- LA4254 Processor (贪心+二分)
- HDU - 5265 pog loves szh II (二分或者贪心)
- 二分贪心21
- HDU 5884 Sort(2016年青岛网络赛 G 二分+贪心+小优化)
- cf#307-C - GukiZ hates Boxes-二分+贪心