度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
输入描述:
第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi
(-1e9<=xi,yi<=1e9)表示网格上的点
输出描述:
一行输出最小面积
输入例子:
2
0 0
0 3
输出例子:
9
代码:
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int maxX=Integer.MIN_VALUE;
int minX=Integer.MAX_VALUE;
int maxY=Integer.MIN_VALUE;
int minY=Integer.MAX_VALUE;
for(int i=0;i
int x=sc.nextInt() ;
int y=sc.nextInt();
maxX=Math.max(x, maxX);
minX=Math.min(x, minX);
maxY=Math.max(y, maxY);
minY=Math.min(y, minY);
}
int max=Math.max(maxX-minX,maxY-minY);
System.out.println(max*max);
}
}
}
收获:(1)思路:所有的点都减在一个正方形的格子里,所以只要判断所有点的横坐标和纵坐标的最小值和最大值。
比较下横坐标和纵坐标各自最大值和最小值的差,选择差最大的作为正方形的边长即可求得最小的正方形。
(2)int maxX=Integer.MIN_VALUE;
int minX=Integer.MAX_VALUE;
int maxY=Integer.MIN_VALUE;
int minY=Integer.MAX_VALUE;