算法思想:分别求横坐标最大差值以及纵坐标最大差值,取较大的那个差值,即为正方形的边长。注意结果取long long类型,防止溢出。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int N;
cin>>N;
vector<int> X;
vector<int> Y;
int x;
int y;
for(int i = 0; i < N; i ++){
cin>>x>>y;
X.push_back(x);
Y.push_back(y);
}
sort(X.begin(),X.end());
sort(Y.begin(),Y.end());
long long delta = X[N-1] - X[0] > Y[N-1] - Y[0] ? X[N-1] - X[0] : Y[N-1] - Y[0];
cout<<delta*delta<<endl;
return 0;
}
看花问题
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
int main(){
int n, m;
cin>>n>>m;
int *a = new int[n + 1];
for(int i = 1; i <= n; i ++){
cin>>a[i];
}
int Q;
cin>>Q;
int **arr = new int*[Q];
for(int i = 0; i < Q; i ++){
arr[i] = new int[2];
}
for(int i = 0; i < Q; i ++){
cin>>arr[i][0]>>arr[i][1];
}
set<int> b;
for(int j = 0; j < Q; j ++){
for(int k = arr[j][0]; k <= arr[j][1]; k++)
b.insert(a[k]);//set可以过滤掉不同种类的元素
cout<<b.size()<<endl;
b.clear();
}
return 0;
}