[编程题] 裁减网格纸
度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数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 ;
}