[去哪儿]裁减网格纸

时间限制:1秒 空间限制:32768K 热度指数:13983
本题知识点: 贪心

题目描述

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

 

posted @ 2017-06-05 13:40  懒小小喵  阅读(210)  评论(0编辑  收藏  举报