[去哪儿]裁减网格纸
时间限制:1秒 空间限制:32768K 热度指数:13983
题目描述
度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
输入描述:
第一行一个数n(2≤n≤1000)表示点数,接下来每行一对整数xi
,yi
(-1e9<=xi
,yi
<=1e9)表示网格上的点
输出描述:
一行输出最小面积
输入例子:
2
0 0
0 3
输出例子:
9
思路:把所有的点都减在一个正方形的格子里,所以只要判断所有点的横坐标和纵坐标的最小值和最大值。比较下横坐标和纵坐标各自最大值和最小值的差,选择差最大的作为正方形的边长即可求得最小的正方形
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int getlen(vector<int> vec) 7 { 8 int max = vec[0]; 9 int min = vec[0]; 10 int n=vec.size(); 11 for (int i = 1;i < n;i++) 12 { 13 if (max < vec[i]) 14 { 15 max = vec[i]; 16 } 17 if(min> vec[i]) 18 { 19 min = vec[i]; 20 } 21 } 22 return max - min; 23 24 } 25 26 int main() 27 { 28 29 int n,x,y; 30 while(cin>>n) 31 { 32 vector<int> width; 33 vector<int> heigh; 34 35 while(n--) 36 { 37 cin>>x>>y; 38 width.push_back(x); 39 heigh.push_back(y); 40 } 41 cout << max(getlen(width), getlen(heigh))*max(getlen(width), getlen(heigh))<<endl; 42 } 43 return 0; 44 45 }