城市构建

刷题记录:
一.城市构建:有一个城市需要修建,给你N个民居的坐标X,Y,问把这么多民居全都包进城市的话,城市所需最小面积是多少(注意,城市为平行于坐标轴的正方形)
其实就是最大值和最小值相乘,找了几个比较规范的牛友答案,自己理了理论部分,手上过了一遍。
1.牛友版本

#include <stdio.h>
 int main(void){    
 int n;    
 long long area;    
 long long x[1005],y[1005];    
 scanf("%d",&n);    
 for(int i=0;i<n;i++){        
 scanf(“%lld%lld",&x[i],&y[i]);  
  }     
 long long max=x[0];   
 long long may=y[0];   
 long long mix=x[0];   
 long long miy=y[0];   
 long long mx,my;    
for(int j=0;j<n;j++){        
if(x[j]>max)           
 max=x[j];       
 if(x[j]<mix)           
 mix=x[j];       
 if(y[j]>may)           
 may=y[j];       
 if(y[j]<miy)            
miy=y[j];   
 }     
 mx=max-mix;   
 my=may-miy;      
if(mx>my)   
area=mx*mx;    
else    
area=my*my;    
 printf("%lld",area);
    return 0;
}  

2.自己照着敲了一个版本
#include <stdio.h>
 int main(void){
    int n;
    long long area;
    long long x[1002],y[1002];
    scanf("%d",&n);
    for(int i=0;i<n;i++){
       scanf("%lld%lld",&x[i],&y[i]); }
       long long mix=x[0];
        long long miy=y[0];
        long long max=x[0];
        long long may=y[0];
         long long mx,my;
        for(int j=0;j<n;j++){
            if(x[j]<mix)
                mix=x[j];
            if(x[j]>max)
                max=x[j];
            if(y[j]<miy)
                miy=y[j];
            if(y[j]>may)
                may=y[j];
            }
      mx=max-mix;
      my=may-miy;
        if(mx>my)
            area=mx*mx;
        else area=my*my;
        printf("%lld",area);
        return 0;}

3.
#include <iostream>
#include <climits>
#include <algorithm>
using namespace std;
long long minArea(int& n){
  long long minx = INT64_MAX, miny = INT64_MAX, maxx = INT64_MIN, maxy = INT64_MIN;
    // 读入数据的时候就计算    
    for (int i = 0; i < n; i++) {
        long long x, y;        
        cin >> x >> y;        
        minx = min(minx, x);        
        miny = min(miny, y);        
        maxx = max(maxx, x);        
        maxy = max(maxy, y);  
      }
    // 计算结果    
    long long edge = max(abs(maxx - minx), abs(maxy - miny));
    return edge * edge;}  
int main(){
    // 读入数据
    int n;
    cin >> n;
    cout << minArea(n) << endl;
    return 0;}

4.结合1.3  改了输入输出的方法
#include <iostream>
using namespace std;
int main(void){
    int n;
    long long area;
    long long x[1002],y[1002];
    cin>>n;
    for(int i=0;i<n;i++){
       cin>>x[i];
       cin>>y[i];
    }
        long long mix=x[0];
        long long miy=y[0];
        long long max=x[0];
        long long may=y[0];
        long long mx,my;
        for(int j=0;j<n;j++){
            if(x[j]<mix)
                mix=x[j];
            if(x[j]>max)
                max=x[j];
            if(y[j]<miy)
                miy=y[j];
            if(y[j]>may)
                may=y[j];
            }
     mx=max-mix;
     my=may-miy;
        if(mx>my)
            area=mx*mx;
        else area=my*my;
        cout<<area<<endl;
        return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务