遗址 (Standard IO)

题意/Description:

       很久很久以前有一座寺庙,从上往下看寺庙的形状正好是一个正方形,在4个角上竖立着圆柱搭建而成。现在圆柱都倒塌了,只在地上留下圆形的痕迹,可是现在地上有很多这样的痕迹,专家说一定是最大的那个。
       写一个程序,给出圆柱的坐标,找出由4个圆柱构成的最大的正方形,因为这就是寺庙的位置,要求计算出最大的面积。注意正方形的边不一定平行于坐标轴。
       例如下图有10根柱子,其中(4,2),(5,2),(5,3),(4,3)可以形成一个正方形,(1,1),(4,0),(5,3),(2,4)也可以,后者是其中最大的,面积为10。



读入/Input

       第一行包含一个N(1<=N<=3000),表示柱子的数量。
       接下来N行,每行有两个空格隔开的整数表示柱子的坐标(坐标值在0.到5000之间),柱子的位置互不相同。


输出/Output

       如果存在正方形,输出最大的面积,否则输出0。


题解/solution

       枚举任意两个点,画画的出第三和第四个点:

              第三:             y1:=y[i]+x[j]-x[i];    x1:=x[i]-y[j]+y[i];
              第四:             x2:=x1+x[j]-x[i];      y2:=y1+y[j]-y[i];

        然后判断这两个点是否存在。

      (注:这式子是对于某一条边的。)


代码/Code

var
  n,max:longint;
  x,y:array[1..3000] of longint;
  a:array[0..5000,0..5000]of boolean;
procedure init;
var
  i:longint;
begin
  readln(n);
  for i:=1 to n do
    begin
      readln(x[i],y[i]);
      a[x[i],y[i]]:=true;
    end;
  max:=0;
end;

procedure main;
var
  i,j,x1,x2,y1,y2,s:longint;
begin
  for i:=1 to n-1 do
    begin
      for j:=i+1 to n do
        begin
          s:=sqr(x[j]-x[i])+sqr(y[j]-y[i]);
          if s>max then
            begin
              y1:=y[i]+x[j]-x[i];
              x1:=x[i]-y[j]+y[i];
              x2:=x1+x[j]-x[i];
              y2:=y1+y[j]-y[i];
              if (x1>=0) and (x2>=0) and (y1>=0) and (y2>=0) and
                (x1<=5000) and (x2<=5000) and (y1<=5000) and (y2<=5000) and
                  a[x1,y1] and a[x2,y2] then max:=s;
            end;
        end;
    end;
end;

begin
  init;
  main;
  writeln(max);
end.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值