天天看点

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

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[];
    int Y[];
    while(scanf("%d",&n)!=EOF){

        for(int i=;i<n;++i)
            scanf("%d %d",&X[i],&Y[i]);

            int left = X[];
            int right = X[];
            int top = Y[];
            int bottom = Y[];
            for(int i=;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 ;
}
           

继续阅读