城市构建
刷题记录:
一.城市构建:有一个城市需要修建,给你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; }