您的位置:首页 > 编程语言

裁减网格纸----百度2016研发工程师在线编程题

2016-08-03 21:24 465 查看
[编程题] 裁减网格纸

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


输出描述:
一行输出最小面积


输入例子:
2
0 0
0 3


输出例子:
9


这题我得吐槽一下样例了啊

有个538的样例没有跑过去,然后我把样例拷贝下来了,看了一眼就200多行

后来看到题目中确实没有说  接下来的n行这种字样, 我以为可能就是不给足n行,又跑了一次,又挂这个样例上了

最后看了一眼,9274根本就不是一个整数的平方,这答案是怎么给出来的

这题就记录一下x轴的max距离和y轴的max距离就行了啊。

#include <iostream>
#include <vector>

using namespace::std ;

int main() {
int n ;

while ( cin >> n ) {
vector<int> x( n, 0 ) ;
vector<int> y( n, 0 ) ;
for ( int i = 0; i < n; ++ i ) {
cin >> x[i] >> y[i] ;
}

int minx, miny, maxx, maxy ;
minx = maxx = x[0] ;
miny = maxy = y[0] ;
for ( int i = 1; i < n; ++ i ) {
if ( minx > x[i] ) minx = x[i] ;
if ( maxx < x[i] ) maxx = x[i] ;
if ( miny > y[i] ) miny = y[i] ;
if ( maxy < y[i] ) maxy = y[i] ;
}

int result = 0 ;
int x_length = maxx - minx ;
int y_length = maxy - miny ;
if ( x_length > y_length ) result = x_length * x_length ;
else result = y_length * y_length ;

cout << result << endl ;
}
return 0 ;
}

第二次做,一杆过~

#include <iostream>
#include <vector>

using namespace::std ;

int main() {
int n ;

while ( cin >> n ) {
vector<int> x ;
vector<int> y ;
for ( int i = 0 ; i < n; ++ i ) {
int tmp_x, tmp_y ;
cin >> tmp_x >> tmp_y ;
x.push_back( tmp_x ) ;
y.push_back( tmp_y ) ;
}

int minx, miny, maxx, maxy ;
minx = maxx = x[0] ;
miny = maxy = y[0] ;

for ( int i = 0; i < n; ++ i ) {
if ( x[i] > maxx ) maxx = x[i] ;
if ( x[i] < minx ) minx = x[i] ;
if ( y[i] > maxy ) maxy = y[i] ;
if ( y[i] < miny ) miny = y[i] ;
}

int result = 0 ;
int length_x = maxx - minx ;
int length_y = maxy - miny ;
if ( length_x > length_y ) result = length_x * length_x ;
else result = length_y * length_y ;

cout << result << endl ;
}

return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: