zoukankan      html  css  js  c++  java
  • 2016百度编程题:裁减网格纸

    题目描述

    度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。 
    输入描述:
    第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,yi<=1e9)表示网格上的点
    输出描述:
    一行输出最小面积
    输入例子:
    2
    0 0
    0 3
    输出例子:
    9
    解题

    第一反应求任意了点横纵坐标差的绝对值的最大值,时间复杂度O(N*N)
    这样应该不好,然后考虑到这一的正方形其作用的点在左上 和 右下,只有这两个点起作用,左上最小点 则右下就是最大点,这样只要线性时间就可以了。
    有一点要说明下,下面对 横坐标 和纵坐标 的最值 是分开计算的,由于x的最小可能对于y的最大,两者相对独立的
    import java.util.Scanner;
    public class Main{
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            while(in.hasNext()){
                int n = in.nextInt();
                int minX = in.nextInt();
                int minY = in.nextInt();
                int maxX = minX;
                int maxY = minY;
                for(int i = 0;i<n-1;i++){
                    int x = in.nextInt();
                    int y = in.nextInt();
                    minX = Math.min(minX,x);
                    minY = Math.min(minY,y);
                    maxX = Math.max(maxX,x);
                    maxY = Math.max(maxY,y);
                }
                int d1 = Math.abs(maxX - minX);
                int d2 = Math.abs(maxY - minY);
                int d = Math.max(d1,d2);
                System.out.println(d*d);
            }
        }
    }
  • 相关阅读:
    go timer
    go语言函数作为参数传递
    gomail发送附件
    统计和图片来说话
    一个发邮件的demo 用golang
    Shelled-out Commands In Golang
    阅读笔记
    语言和人收藏
    在线学习网址
    通用首席娱乐官:了解自己是成功的基础
  • 原文地址:https://www.cnblogs.com/theskulls/p/5306908.html
Copyright © 2011-2022 走看看