裁减网格纸

Posted on 2016-04-20 08:51  徐岩  阅读(214)  评论(0)    收藏  举报

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

输入描述:
第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi,yi(-1e9<=xi,yi<=1e9)表示网格上的点
输出描述:
一行输出最小面积
输入例子:
2
0 0
0 3
输出例子:
9

Solution 1:
#include <iostream>
using namespace std;

struct Point{
    int x;
    int y;
};

int main(){
    // write code here
    Point *pt;
    int n;
    
    while(cin >> n){
        pt = new Point[n];
        for(int i = 0; i < n; ++i){
            cin >> pt[i].x >> pt[i].y;    
        }
        
        int minX, maxX;
        int minY, maxY;
        minX = maxX = pt[0].x;
        minY = maxY = pt[0].y;
        
        for(int i = 1; i < n; ++i){
            minX = (minX <= pt[i].x) ? minX : pt[i].x;
            maxX = (maxX >= pt[i].x) ? maxX : pt[i].x;
            minY = (minY <= pt[i].y) ? minY : pt[i].y;
            maxY = (maxY >= pt[i].y) ? maxY : pt[i].y;  
        }
        
        int lengthX = maxX - minX;
        int lengthY = maxY - minY;
        int result = (lengthX > lengthY) ? lengthX : lengthY;   
        
        cout << result * result << endl;
    }
    return 0;
}

Solution 2: