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

📄 ac1043.pas

📁 uralcode
💻 PAS
字号:
program ural1043;
const
  zero=1e-6;
var
  x1,y1,x2,y2,x3,y3,maxx,minx,maxy,miny:integer;
  x,y,r,alpha,beta,gamma:real;
  b:boolean;
function max(a,b:real):real;
  begin
    if a>b then max:=a else max:=b;
  end;
function min(a,b:real):real;
  begin
    if a<b then min:=a else min:=b;
  end;
function upint(a:real):integer;
  begin
    if abs(a-round(a))<zero then
      upint:=round(a)
    else
      if a>0 then upint:=trunc(a)+1 else upint:=trunc(a);
  end;
function downint(a:real):integer;
  begin
    if abs(a-round(a))<zero then
      downint:=round(a)
    else
      if a>0 then downint:=trunc(a) else downint:=trunc(a)-1;
  end;
procedure solve(var x,y:real;a1,b1,c1,a2,b2,c2:integer);
  begin
    x:=(c1*b2-c2*b1)/(a1*b2-a2*b1);
    y:=(c1*a2-c2*a1)/(b1*a2-b2*a1);
  end;
function angle(x1,y1:integer):real;
  begin
    if x1=x then
      if y1>y then angle:=pi*0.5 else angle:=pi*1.5
    else if x1>x then begin
      angle:=arctan((y1-y)/(x1-x));
      if angle<0 then angle:=angle+pi*2;
    end
    else
      angle:=arctan((y1-y)/(x1-x))+pi;
  end;
function onarc(angle:real):boolean;
  begin
    onarc:=((angle-alpha)*(angle-beta)<=0)=b;
  end;
begin
  readln(x1,y1,x2,y2,x3,y3);
  solve(x,y,2*(x1-x2),2*(y1-y2),x1*x1-x2*x2+y1*y1-y2*y2,
            2*(x1-x3),2*(y1-y3),x1*x1-x3*x3+y1*y1-y3*y3);
  {Solve the equation
    sqr(x1-x)+sqr(y1-y)=sqr(x2-x)+sqr(y2-y)=sqr(x3-x)+sqr(y3-y)}
  r:=sqrt(sqr(x1-x)+sqr(y1-y));
  alpha:=angle(x1,y1);beta:=angle(x2,y2);gamma:=angle(x3,y3);
  b:=(gamma-alpha)*(gamma-beta)<=0;
  if onarc(0) then maxx:=upint(x+r) else maxx:=upint(max(x1,x2));
  if onarc(pi*0.5) then maxy:=upint(y+r) else maxy:=upint(max(y1,y2));
  if onarc(pi) then minx:=downint(x-r) else minx:=downint(min(x1,x2));
  if onarc(pi*1.5) then miny:=downint(y-r) else miny:=downint(min(y1,y2));
  writeln((maxx-minx)*(maxy-miny));
end.

⌨️ 快捷键说明

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