当前位置: 代码迷 >> 综合 >> SSL1232雷达覆盖(normal)
  详细解决方案

SSL1232雷达覆盖(normal)

热度:103   发布时间:2023-10-09 10:51:23.0

题目描述

以雷达心为圆心的半圆形雷达覆盖范围有多个点 雷达可旋转,求最多覆盖数(含在边界的)

样例输入

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

思路

O(km^2)
先把雷达范围内的点用勾股定理剔除,再以每个点和圆心的直线为直径,计算左边和右边的点数,覆盖的点数要加上在直径上的点。
varx,y:array[1..1000] of longint;n,a,b,c:double;m,i,j,k,l,r,mid,max:longint;
beginreadln(a,b,n);while not eof(input) dobeginreadln(m);j:=0;for i:=1 to m dobegininc(j);readln(x[j],y[j]);if sqrt(sqr(a-x[j])+sqr(b-y[j]))>n thendec(j);end;max:=0;for i:=1 to j dobeginmid:=0;l:=0;r:=0;for k:=1 to j dobeginc:=(y[k]-b)*(x[i]-a)-(x[k]-a)*(y[i]-b);if c=0 then inc(mid);if c<0 then inc(l);if c>0 then inc(r);end;if l+mid>max then max:=l+mid;if r+mid>max then max:=r+mid;end;writeln(max);readln(a,b,n);end;
end.
  相关解决方案