Time Limit:1000MS Memory Limit:65536K
Total Submit:129 Accepted:57
Description
以雷达心为圆心的半圆形雷达覆盖范围有多个点 雷达可旋转,求最多覆盖数(含在边界的)
Input
Output
Sample Input
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
Sample Output
3
4
4
先用沟谷判断点是否在雷达范围内。................................................................................再用叉积:枚举每一个在范围内的点,与雷达连成直线,在用叉积判断在直线的哪一边。记录下每一边的点的个数,将大一边的记录进max,最后write出max即可
var
map:array[0..1001,0..3]of longint;
i,j,n,x,y,t,sum,max,xx,yy,left,right,mid:longint;
l,s:real;
begin
while true do
begin
read(x,y,l);
if l<0 then break;
read(n);
for i:=1 to n do
begin
read(xx,yy);
s:=sqrt(sqr(xx-x)+sqr(yy-y));
if l>=s then
begin
inc(sum);
map[sum,1]:=xx;
map[sum,2]:=yy;
end;
end;
for i:=1 to sum do
begin
for j:=1 to sum do
begin
if (map[i,1]-x)*(map[j,2]-y)-(map[j,1]-x)*(map[i,2]-y)=0 then inc(mid);
if (map[i,1]-x)*(map[j,2]-y)-(map[j,1]-x)*(map[i,2]-y)>0 then inc(left);
if (map[i,1]-x)*(map[j,2]-y)-(map[j,1]-x)*(map[i,2]-y)<0 then inc(right);
end;
if max<mid+left then max:=mid+left;
if max<mid+right then max:=mid+right;
mid:=0; right:=0; left:=0;
end;
fillchar(map,sizeof(map),0);
l:=0; sum:=0;
writeln(max);
max:=0;
end;
end.