题意:
以雷达心为圆心的半圆形雷达覆盖范围有多个点 雷达可旋转,求最多覆盖数(含在边界的)
思路:
计算几何的差积考点和点到点的距离。针对这题就只用直接先用亮点距离公式把一定不能打到的都去掉,然后利用差积的
(p1,p2)m>0 p1在p2的顺时针方向
(p1,p2)m<0 p1在p2的逆时针方向
(p1,p2)m=0 p1和p2同一直线
相对点公式:m=(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0)对于原点就不用减去了
程序
const
maxn=3000;
var
x,y:array[0..maxn] of real;
max,p,q,s,sum,i,j:longint;
r,m,xi,yi:real;
procedure main;
var
i,j:longint;
begin
for i:=1 to sum do
begin
p:=0;q:=0;s:=0;
for j:=1 to sum do
begin
m:=(x[i]-xi)*(y[j]-yi)-(x[j]-xi)*(y[i]-yi);
if m=0 then inc(s);
if m>0 then inc(p);
if m<0 then inc(q);
end;
if s+p>max then max:=s+p;
if s+q>max then max:=s+q;
end;
end;
begin
readln(xi,yi,r);
while not (eof(input)) do
begin
max:=0;
sum:=0;
readln(j);
for i:=1 to j do
begin
readln(p,q);
if sqrt(sqr(p-xi)+sqr(q-yi))<=r then
begin
inc(sum);
x[sum]:=p;
y[sum]:=q;
end;
end;
main;
writeln(max);
readln(xi,yi,r);
end;
end.