您的位置:首页 > 其它

牛客网---2016---百度剪裁网格纸

2017-07-26 13:17 218 查看
兔子今早吃的豆腐脑,没有跑去学校,然后睡了一觉,然后看了会书,发了会呆,准备一会做饭自己吃,啧啧,最近疯狂喜欢吃干豆腐和洋葱,怕是石乐志的哟。。。



题目:

度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。

输入:

第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,yi<=1e9)表示网格上的点

2
0 0
0 3


输出:

一行输出最小面积

9


解析:

1 . 实质上的算法就是不断确定x轴和y轴的最大差值(最大值-最小值),然后取最大差值的平方,想法应该蛮简单的

解题所需函数:

1 . Java中int的最大值和最小值如何定义,不要用老土的0和1000000了。

// 注意下,这里因为定义maxX为最小值是因为取最小值,任何值必定比他大,所以反过来定义
int maxX = Integer.MIN_VALUE;
int minX = Integer.MAX_VALUE;


2 . 取两者的极大值或者极小值

max = (int) Math.max(a,b);
min = (int) Math.min(a,b);


3 . 开方函数和平方函数

// k开平方
a = Math.sqrt(k)
// x的a次方
b = Math.pow(x,a)
// 所以讲道理,x的开平方根就是。。。
b = Math.pow(x,1.0/2.0)


代码:

import java.util.Scanner;
public class Main{
public static void main(String[] args){
// 创建Scanner
Scanner scan = new Scanner(System.in);
// 如果还有数据输入
while(scan.hasNext()){
// 读取输入个数
int n = scan.nextInt();
int maxX = Integer.MIN_VALUE;
int maxY = Integer.MIN_VALUE;
int minX = Integer.MAX_VALUE;
int minY = Integer.MAX_VALUE;
// 进行for循环,遍历所有数据
for (int i=0;i<n;i++){
int x = scan.nextInt();
int y = scan.nextInt();
maxX = (int) Math.max(maxX,x);
maxY = (int) Math.max(maxY,y);
minX = (int) Math.min(minX,x);
minY = (int) Math.min(minY,y);
}
// 取两个边界的最大值
int side =
4000
(int)Math.max((maxX-minX),(maxY-minY));
System.out.println(side*side);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: