萌新刚学OI不知道哪里错了求调
查看原帖
萌新刚学OI不知道哪里错了求调
1000298
Vsinger_洛天依楼主2024/8/12 18:58

只有 30 分,翻了题解觉得思路是差不多的

#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int long long
#define ull unsigned long long
#define re register
#define for_(a,b,c) for(int a=b;a<=c;a++)
#define _for(a,b,c) for(int a=b;a>=c;a--)
#define firein(a) freopen(a".in","r",stdin)
#define fireout(a) freopen(a".out","w",stdout)
#define fire(a) (firein(a),fireout(a))
#define lc(q) (q<<1)
#define rc(q) (q<<1|1)
#define mid(l,r) ((l+r)>>1)

using namespace std;

const int N=0x66ccff;
const int M=0x6cf;
const ll INF=0x66ccff0712ll;
const ll inf=LLONG_MAX;

const int N = 100050;

class Point{
 public:
    int x,y;
}P[N];
int n, vis[N];
int X[2],Y[2];
inline bool DFS(int L,int siz){
    X[0]=inf;Y[0]=inf;
    X[1]=-inf;Y[1]=-inf;
    for_(i,1,n){
        if(!vis[i]){
            X[0]=min(X[0],P[i].x);
            X[1]=max(X[1],P[i].x);
            Y[0]=min(Y[0],P[i].y);
            Y[1]=max(Y[1],P[i].y);
        }
    }
    if(siz==1){
        return ((X[1]<=L+X[0])&&(Y[1]<=L+Y[0]));
    }
    for_(i,0,1) {
        for_(j,0,1){
            for_(k,1,n){
                if(!vis[k]){
                    if(max(abs(P[k].x-X[i]),abs(P[k].y-Y[j]))<=L){ 
                        vis[k]=siz;
                    }
                }
            }
            if(DFS(L,siz-1)){ 
                return true;
            }
            for_(k,1,n){ 
                if(vis[k]==siz){
                    vis[k]=0;
                }
            }
        }
    }
    return false;
}
inline void In(){
    cin >> n;
    int MinX=inf,MinY=inf,MaxX=-inf,MaxY=-inf;
    for_(i,1,n){
        cin >> P[i].x >> P[i].y;
        MinX=min(MinX,P[i].x);
        MaxX=max(MaxX,P[i].x);
        MinY=min(MinY,P[i].y);
        MaxY=max(MaxY,P[i].y);
    }

    int l=0, r=max(MaxX-MinX,MaxY-MinY), mid;
    while(l<=r) {
        mid=(l+r)/2;
        memset(vis,0,sizeof(vis));
        if(!DFS(mid,3)) {
            l=mid+1;
        }
        else{
            r=mid-1;
        }
    }
    cout << l << endl;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

	In();
}

2024/8/12 18:58
加载中...