• 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.
    
  • 相关阅读:
    异常单据锁定涉及的数据库表
    用友通只启用核算模块
    一个迟到MM如何让老师疯掉的
    偷偷看,别笑出声啊
    安装时又提示删除程序
    自动折行的设置
    酒后百态新编 恶搞
    系统管理中“站点”“运行状态”的含义
    神经病女士银行取钱
    HDOJ 1017
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319584.html
Copyright © 2020-2023  润新知