SSL1232雷达覆盖(normal)

题目描述

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

样例输入

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)
先把雷达范围内的点用勾股定理剔除,再以每个点和圆心的直线为直径,计算左边和右边的点数,覆盖的点数要加上在直径上的点。
var
  x,y:array[1..1000] of longint;
  n,a,b,c:double;
  m,i,j,k,l,r,mid,max:longint;
begin
  readln(a,b,n);
  while not eof(input) do
    begin
      readln(m);j:=0;
      for i:=1 to m do
        begin
          inc(j);
          readln(x[j],y[j]);
          if sqrt(sqr(a-x[j])+sqr(b-y[j]))>n then
            dec(j);
        end;
      max:=0;
      for i:=1 to j do
        begin
          mid:=0;l:=0;r:=0;
          for k:=1 to j do
            begin
              c:=(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.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值