VTRI - Triangles

Tác giả: RR

Ngôn ngữ: Pascal

{$R+,Q+}
PROGRAM VTRI;
CONST
  FINP='';
  FOUT='';
  esp=0.0001;
VAR
  x,y,s:integer;
  kq:longint;
procedure readInput;
var
  f:text;
begin
  assign(f,FINP); reset(f);
  readln(f,x,y,s);
  close(f);
end;
procedure writeOutput;
var
  f:text;
begin
  assign(f,FOUT); rewrite(f);
  writeln(f,kq);
  close(f);
end;
function kc(x1,y1,x2,y2:shortint):real;
begin
  kc:=sqrt(sqr(x1-x2)+sqr(y1-y2));
end;
function dt(x1,y1,x2,y2,x3,y3:shortint):real;
var
  a,b,c,p:real;
begin
  a:=kc(x1,y1,x2,y2);
  b:=kc(x2,y2,x3,y3);
  c:=kc(x3,y3,x1,y1);
  p:=(a+b+c)/2;
  dt:=sqrt(p*(p-a)*(p-b)*(p-c));
end;
function max(a,b:shortint):shortint;
begin
  if a>b then max:=a else max:=b;
end;
procedure solve;
var
  x1,y1,x2,y2,ym,xm:shortint;
begin
  kq:=0;
  for x1:=-x to x do
  for y1:=0 to y do
  if (x1>0) or (y1>0) then
    for x2:=x1 to x1+x do
    for y2:=0 to y do
    if (x2>x1) or (y2>y1) then
    if (x2-x1<=x) and (x2<=x) then
    if (x2>0) or (y2>0) then
    if abs(dt(x1,y1,x2,y2,0,0)-s)<esp then
      begin
        ym:=max(y1,y2);
        xm:=max(abs(x2-x1),abs(x2));
        xm:=max(xm,abs(x1));
        kq:=kq+(y-ym+1)*(x-xm+1)*2;
      end;
  kq:=kq div 2;
end;
procedure solve1;
var
  x1,y1,x2,y2,x3,y3:shortint;
begin
  for x1:=0 to x do
  for y1:=0 to y do
    for x2:=0 to x do
    for y2:=0 to y do
      for x3:=0 to x do
      for y3:=0 to y do
        if abs(dt(x1,y1,x2,y2,x3,y3)-s)<esp then inc(kq);
  kq:=kq div 6;
end;
BEGIN
  readInput;
  solve;
  writeOutput;
END.

Download