题解:CF2114D Come a Little Closer
模拟题,根据题目意思来即可,对于读入的数据,我们可以分别用两个数组来维护,用
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define int long long
#define MAXN 1000010
#define x first
#define y second
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
typedef pair<int,int> PII;
PII q[MAXN],p[MAXN];
void solve(){
int n;
cin>>n;
int x1=1e14,x2=0,y1=1e14,y2=0;
int mi=1e18;
for(int i=1;i<=n;i++){
int a,b;
cin>>a>>b;
x1=min(x1,a);
x2=max(x2,a);
y1=min(y1,b);
y2=max(y2,b);
q[i]={a,b};
p[i]={b,a};
}
if(n==1){
cout<<1<<endl;
return ;
}
sort(q+1,q+1+n);//x轴
sort(p+1,p+1+n);//y轴
if(q[n].x==p[n].y)mi=min(mi,(q[n-1].x-x1+1)*(p[n-1].x-y1+1));
else {
mi=min(mi,(q[n-1].x-x1+1)*(y2-y1+1));
mi=min(mi,(x2-x1+1)*(p[n-1].x-y1+1));
}
if(q[n].x==p[1].y)mi=min(mi,(q[n-1].x-x1+1)*(y2-p[2].x+1));
else {
mi=min(mi,(q[n-1].x-x1+1)*(y2-y1+1));
mi=min(mi,(x2-x1+1)*(y2-p[2].x+1));
}
if(q[1].x==p[1].y)mi=min(mi,(x2-q[2].x+1)*(y2-p[2].x+1));
else {
mi=min(mi,(x2-q[2].x+1)*(y2-y1+1));
mi=min(mi,(x2-x1+1)*(y2-p[2].x+1));
}
if(q[1].x==p[n].y)mi=min(mi,(x2-q[2].x+1)*(p[n-1].x-y1+1));
else {
mi=min(mi,(x2-q[2].x+1)*(y2-y1+1));
mi=min(mi,(x2-x1+1)*(p[n-1].x-y1+1));
}
if(mi<n){
mi=1e18;
if(q[n].x==p[n].y)mi=min(mi,min((q[n-1].x-x1+2)*(p[n-1].x-y1+1),(q[n-1].x-x1+1)*(p[n-1].x-y1+2)));
else {
mi=min(mi,(q[n-1].x-x1+2)*(y2-y1+1));
mi=min(mi,(q[n-1].x-x1+1)*(y2-y1+2));
mi=min(mi,(x2-x1+1)*(p[n-1].x-y1+2));
mi=min(mi,(x2-x1+2)*(p[n-1].x-y1+1));
}
if(q[n].x==p[1].y)mi=min(mi,min((q[n-1].x-x1+1)*(y2-p[2].x+2),(q[n-1].x-x1+2)*(y2-p[2].x+1)));
else {
mi=min(mi,(q[n-1].x-x1+2)*(y2-y1+1));
mi=min(mi,(q[n-1].x-x1+1)*(y2-y1+2));
mi=min(mi,(x2-x1+2)*(y2-p[2].x+1));
mi=min(mi,(x2-x1+1)*(y2-p[2].x+2));
}
if(q[1].x==p[1].y)mi=min(mi,min((x2-q[2].x+1)*(y2-p[2].x+2),(x2-q[2].x+2)*(y2-p[2].x+1)));
else {
mi=min(mi,(x2-q[2].x+2)*(y2-y1+1));
mi=min(mi,(x2-q[2].x+1)*(y2-y1+2));
mi=min(mi,(x2-x1+2)*(y2-p[2].x+1));
mi=min(mi,(x2-x1+1)*(y2-p[2].x+2));
}
if(q[1].x==p[n].y)mi=min(mi,min((x2-q[2].x+2)*(p[n-1].x-y1+1),(x2-q[2].x+1)*(p[n-1].x-y1+2)));
else {
mi=min(mi,(x2-q[2].x+2)*(y2-y1+1));
mi=min(mi,(x2-q[2].x+1)*(y2-y1+2));
mi=min(mi,(x2-x1+2)*(p[n-1].x-y1+1));
mi=min(mi,(x2-x1+1)*(p[n-1].x-y1+2));
}
}
cout<<mi<<endl;
}
signed main(){
ios;
int t;
cin>>t;
while(t--)
solve();
return 0;
}