zju 1041 雷达覆盖

Description

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

这里写图片描述

Input

Output

题解

先把雷达不可能覆盖的点排除,每个点与中点都组成一个直线方程完后线性规划看其他的点在这条直线左边的inc(l)在右边的inc(r)在直线的inc(m),完后比较m+l与max的大小和r+m与max的大小。这题就完了。

代码

var
  xn,yn,n,num:longint;
  rn:real;
  x,y:array [0..1001] of longint;
procedure init;
var
  i,xx,yy,nn:longint;
begin
  n:=0;
  readln(xn,yn,rn);
  if rn<=0 then halt;
  readln(nn);
  for i:=1 to nn do
    begin
      readln(xx,yy);
      if sqrt(sqr(xx-xn)+sqr(yy-yn))<=rn then
        begin
          inc(n);
          x[n]:=xx; y[n]:=yy;
        end;
    end;
end;

function max(o,p:longint):longint;
begin
  if o>p then exit(o);
  exit(p);
end;

procedure main;
var
  i,j,r,l,m:longint;
begin
  num:=0;
  for i:=1 to n do
    begin
      r:=0; l:=0; m:=0;
      for j:=1 to n do
        begin
          if (x[i]-xn)*(y[j]-yn)-(x[j]-xn)*(y[i]-yn)=0 then inc(m);
          if (x[i]-xn)*(y[j]-yn)-(x[j]-xn)*(y[i]-yn)<0 then inc(r);
          if (x[i]-xn)*(y[j]-yn)-(x[j]-xn)*(y[i]-yn)>0 then inc(l);
        end;
      num:=max(max(num,m+r),m+l);
    end;
end;

begin
  while 1=1 do
    begin
      init;
      main;
      writeln(num);
    end;
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值