zoukankan      html  css  js  c++  java
  • 遗址 (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.



  • 相关阅读:
    3927Circular Sequence 思维题(求环形最大子列和)
    Rotational Painting(hdu 3685 凸包+多边形重心 模板题
    模拟 3897: Catch the Mouse
    L3-010 是否完全二叉搜索树 (30分)
    已知两种遍历顺序 推剩下的一种
    进阶实验4-3.3 完全二叉搜索树 (30分)->排序得出搜索树中序遍历->已知搜索树中序求层序
    任意进制转化/模板(c++/ java)
    4038: Robot Navigation --bfs(求最短路及其路径条数)
    A Simple Math Problem(hdu 5974 数论题
    LCM Walk(hdu 5584;数论题
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319631.html
Copyright © 2011-2022 走看看