zoj 雷达覆盖(计算几何 向量)

题意:

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

思路:

计算几何的差积考点和点到点的距离。针对这题就只用直接先用亮点距离公式把一定不能打到的都去掉,然后利用差积的
(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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值