从基础开始的异世界生活------poj1328

题意:地图的x轴的上方为海,下方为陆地,海中有n个小岛,坐标为(isl[i].x,isl[i].y)。有一种雷达,能探测到的范围为以d为半径的圆。问海岸线上至少造多少雷达可以把所有的小岛都包含在内。注意雷达是建在海岸线上的,也就是x轴上的。

题解:

真的是水题啊。。。。。稍微想一下就好

以每个点作圆心然后画一个半径为d的圆,储存下与x轴的前后交点

将这一堆交点按照后一个交点排序

最后比较,如果rad[j].fir<=rad[i].sec的话,这两个点就可以用一个圆包含,画画图就知道了

贪心就是贪心

至于盼有误无解,直接最大的y值如果>d,或者说d<0,显然是做不到的

//实际上我第一次交忘记判断了。。白白WA了一次quq

AC代码:

#include
#include
#include
#include
#include 
#define maxn 1010
using namespace std;
struct node2{
	int x,y;
}nod[maxn];
struct node{
	double fir,sec;
}rad[maxn];
bool cmp(node a,node b){
	return a.secr || r<0){
		printf("Case %d: -1\n",++k);
		continue;
	}
	sort(rad+1,rad+n+1,cmp);
	int ans=0;
	for(int i=1;i<=n;i++){
		if(!vis[i]){
			vis[i]=1;
			for(int j=1;j<=n;j++){
				if(!vis[j] && rad[j].fir<=rad[i].sec)
					vis[j]=1; 
			}
			ans++;
		}
	}
	printf("Case %d: %d\n",++k,ans);
}
	return 0;
}


你可能感兴趣的:(从基础开始的异世界生活------poj1328)