POJ1328Radar Installation

http://poj.org/problem?id=1328

题的大意就是说在海里有小岛,坐标位置会给出,需要岸边的雷达覆盖所有的小岛,但雷达的覆盖范围有限,所以,需要最少的雷达覆盖所有的小岛,但若是有小岛没法被雷达给覆盖到,就输出-1;

 

 

POJ1328Radar Installation这个题的话可以转化成区间问题就是看雷达的覆盖范围作为半径,A若是小岛的位置,根据雷达的覆盖范围只要不小于这个点的Y坐标,那个覆盖范围就是这个三角形的斜边,所以只要雷达位于1,2边上就可以覆盖到这个小岛

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<iostream>

 4 #include<cstdlib>

 5 #include<cmath>

 6 #include<algorithm>

 7 using namespace std ;

 8 struct node

 9 {

10     double x,y;

11 } s[10001];

12 int cmp(struct node a,struct node b)

13 {

14     if(a.y< b.y)

15         return 1;

16     else return 0 ;

17 }

18 int main()

19 {

20     int n,d ;

21     int cnt = 1;

22     while(cin>>n>>d)

23     {

24 

25         int flag = 0 ;

26         if(n == 0&&d == 0) break ;

27         double a,b ;

28         for(int i = 1 ; i <= n ; i++)

29         {

30             scanf("%lf %lf",&a,&b);

31             if(fabs(b) > d)

32                 flag = 1 ;

33             s[i].x = a-sqrt(d*d-b*b);

34             s[i].y = a+sqrt(d*d-b*b);

35         }

36         cout<<"Case"<<' '<<cnt<<':'<<' ';

37         if(flag == 1)

38             cout<<"-1"<<endl ;

39         else

40         {

41             sort(s+1,s+1+n,cmp);

42             int sum = 1;

43             double zhizhen = s[1].y;

44             for(int i = 2 ; i <= n ; i++)

45             {

46                 if(s[i].x>zhizhen)

47                 {

48                     sum++;

49                     zhizhen = s[i].y;

50                 }

51             }

52 

53             cout<<sum<<endl;

54         }

55         cnt++;

56     }

57     return 0;

58 }
View Code

 

 

你可能感兴趣的:(Install)