SSL.1232雷达覆盖(计算几何)
Posted SSL_LKJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSL.1232雷达覆盖(计算几何)相关的知识,希望对你有一定的参考价值。
雷达覆盖
以雷达心为圆心的半圆形雷达覆盖范围有多个点 雷达可旋转,求最多覆盖数(含在边界的)
输入样例
25 25 3.5------雷达坐标与半径
7----------点数
25 28-------点坐标
23 27
27 27
24 23
26 23
24 29
26 29
350 200 2.0
5
350 202
350 199
350 198
348 200
352 200
995 995 10.0
4
1000 1000
999 998
990 992
1000 999
100 100 -2.5
输出样例
3
4
4
解题思路
先求出距离
再用计算几何判断位置
AC代码
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,x,y,ax[100005],ay[100005];
double r;
int c[100005];
double juli(double x1,double y1,double x2,double y2)//求距离
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
long long cj(long long x1,long long y1,long long x2,long long y2)
return x1*y2-x2*y1;
int main()
while(scanf("%lld%lld%lf",&x,&y,&r))
long long answer=0,k=0;
memset(c,0,sizeof(c));
if(r<0)return 0;
scanf("%lld",&n);
for(long long i=1;i<=n;i++)
scanf("%lld%lld",&ax[i],&ay[i]);
if(juli(x*1.0,y*1.0,ax[i]*1.0,ay[i]*1.0)>r)c[i]=1,k++;
for(long long i=1;i<=n;i++)
long long ans=0,tot=0;
if(!c[i])
for(long long j=1;j<=n;j++)
if(!c[j])
if(cj(x-ax[i],y-ay[i],ax[j]-ax[i],ay[j]-ay[i])<0)ans++;
if(!cj(x-ax[i],y-ay[i],ax[j]-ax[i],ay[j]-ay[i]))tot++;
answer=max(answer,max(ans+tot,n-k-ans));
printf("%lld\\n",answer);
return 0;
谢谢
以上是关于SSL.1232雷达覆盖(计算几何)的主要内容,如果未能解决你的问题,请参考以下文章