题意:海中有n个岛 有一种半径为d的雷达 求最少在岸边安几个雷达即可扫描到所有的岛
很简单的题,贪心算法
对每个小岛求出海边最右边能扫描到小岛的位置(p,0)
按p值对小岛排序
贪心 每次对最左边的未安置雷达的位置(p,0)安置雷达
很简单的题,贪心算法
对每个小岛求出海边最右边能扫描到小岛的位置(p,0)
按p值对小岛排序
贪心 每次对最左边的未安置雷达的位置(p,0)安置雷达
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define M 1005
int n,id;
double d;
bool bans;
struct Node
{
double x,y;
double p;
bool is_cover;
bool operator < (const Node &a)const
{
return p<a.p;
}
void read()
{
scanf("%lf%lf",&x,&y);
if(y>d)
{
bans=false;
}
p=x+sqrt(d*d-y*y);
is_cover=false;
}
}a[M];
void read()
{
int i,x,y;
for(i=0;i<n;i++)
{
a[i].read();
}
sort(a,a+n);
}
void cal()
{
int ans=0;
int i,j;
for(i=0;i<n;i++)
{
if(!a[i].is_cover)
{
a[i].is_cover=true;
ans++;
for(j=i+1;j<n;j++)
{
if(!a[j].is_cover)
{
if( ( (a[j].x-a[i].p) * (a[j].x-a[i].p) + a[j].y*a[j].y ) <= d*d)
{
a[j].is_cover=true;
}
}
}
}
}
printf("Case %d: %d\n",++id,ans);
}
int main()
{
id=0;
while(~scanf("%d%lf",&n,&d))
{
bans=true;
if(n==0&&d==0)
{
break;
}
read();
if(bans)
{
cal();
}
else
{
printf("Case %d: -1\n",++id);
}
}
return 0;
}
本文探讨了在海洋环境中利用雷达覆盖所有岛屿的最优部署策略,通过贪心算法实现雷达的有效配置,确保全面覆盖,避免冗余部署。
240

被折叠的 条评论
为什么被折叠?



