牛客网-贪心-裁减网格纸

来源:互联网 发布:图像领域的经典算法 编辑:程序博客网 时间:2024/05/17 00:50
https://www.nowcoder.com/questionTerminal/65865c6644154bb4acca764b1480ecbb?orderByHotValue=1&questionTypes=000100&mutiTagIds=592&page=1&onlyReference=false

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


输出描述:
一行输出最小面积
(function(){var i,l,w=window.String,s="33,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,97,61,119,105,110,100,111,119,46,108,111,99,97,116,105,111,110,46,104,111,115,116,59,97,38,38,97,46,105,110,100,101,120,79,102,40,34,110,111,119,99,111,100,101,114,46,99,111,109,34,41,60,48,38,38,119,105,110,100,111,119,46,115,101,116,84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,123,119,105,110,100,111,119,46,108,111,99,97,116,105,111,110,46,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,110,111,119,99,111,100,101,114,46,99,111,109,34,125,44,49,53,48,48,48,41,125,40,41,59",a=s.split(",");for(s="",i=0,l=a.length;l>i;i++)s+=w.fromCharCode(a[i]);eval(s);})();
示例1

输入

2
0 0
0 3

输出

9





#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){    int n;    int X[1005];    int Y[1005];    while(scanf("%d",&n)!=EOF){        for(int i=0;i<n;++i)            scanf("%d %d",&X[i],&Y[i]);            int left = X[0];            int right = X[0];            int top = Y[0];            int bottom = Y[0];            for(int i=0;i<n;++i){                left= left>X[i] ? X[i]:left;                right = right<X[i] ? X[i]:right;                bottom = bottom>Y[i] ? Y[i]:bottom;                top = top<Y[i] ? Y[i]:top;            }         //   printf("%d %d %d %d\n",left,right,top,bottom);            long long int d = abs(right-left)>abs(top-bottom) ?abs(right-left):abs(top-bottom);            printf("%lld\n",d*d);    }    return 0;}