⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac1215.pas

📁 uralcode
💻 PAS
字号:
program ural1215;
const
  maxn=100;
var
  x,y:array[0..maxn]of longint;
  x0,y0:longint;
  n,i:byte;
  ans:real;
function min(a,b:real):real;
  begin
    if a<b then min:=a else min:=b;
  end;
function cross(xa,ya,xb,yb,xc,yc:int64):int64;
  var
    x1,y1,x2,y2:int64;
  begin
    x1:=xb-xa;y1:=yb-ya;
    x2:=xc-xa;y2:=yc-ya;
    cross:=x1*y2-x2*y1;
  end;
function dot(xa,ya,xb,yb,xc,yc:int64):int64;
  var
    x1,y1,x2,y2:int64;
  begin
    x1:=xb-xa;y1:=yb-ya;
    x2:=xc-xa;y2:=yc-ya;
    dot:=x1*x2+y1*y2;
  end;
function dist(xa,ya,xb,yb:int64):real;
  begin
    dist:=sqrt(sqr(xa-xb)+sqr(ya-yb));
  end;
function perp(x,y,xa,ya,xb,yb:int64):real;
  begin
    perp:=abs(cross(xa,ya,x,y,xb,yb)/dist(xa,ya,xb,yb));
  end;
function inside:boolean;
  var
    i:byte;
  begin
    for i:=1 to n do
      if cross(x0,y0,x[i-1],y[i-1],x[i],y[i])<0 then begin
        inside:=false;
        exit;
      end;
    inside:=true;
  end;
begin
  read(x0,y0,n);
  for i:=1 to n do
    read(x[i],y[i]);
  x[0]:=x[n];y[0]:=y[n];

  ans:=1e38;
  if inside then
    ans:=0
  else
    for i:=1 to n do
      if (dot(x[i-1],y[i-1],x[i],y[i],x0,y0)<0) or
         (dot(x[i],y[i],x[i-1],y[i-1],x0,y0)<0) then
        ans:=min(ans,min(dist(x0,y0,x[i-1],y[i-1]),dist(x0,y0,x[i],y[i])))
      else
        ans:=min(ans,perp(x0,y0,x[i-1],y[i-1],x[i],y[i]));

  writeln(ans*2:0:3);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -