1 条题解

  • 0
    @ 2026-5-7 18:56:54
    #include<bits/stdc++.h>
    #define ull unsigned long long
    #define int long long
    #define fo(i,l,r) for(int i=l;i<=r;i++)
    #define fd(i,r,l) for(int i=r;i>=l;i--)
    using namespace std;
    int x,y,a[505],b[505],c[505],d[505],n;
    bool check(int k){
    	int l=-k,r=k,u=-k,D=k;
    	bool flag=1;
    	while(flag){
    		flag=0;
    		fo(i,1,n){
    			if(a[i]==c[i]&&l<a[i]&&a[i]<r&&((b[i]<=u&&u<d[i])||(b[i]<D&&D<=d[i])))
    				u=min(u,b[i]-1),D=max(D,d[i]+1),flag=1;
    			else if(b[i]==d[i]&&u<b[i]&&b[i]<D&&((a[i]<=l&&l<c[i])||(a[i]<r&&r<=c[i])))
    				l=min(l,a[i]-1),r=max(r,c[i]+1),flag=1;
    		}
    	}
    	return x<=l||x>=r||y<=u||y>=D;
    }
    signed main(){
    	cin>>x>>y>>n;
    	fo(i,1,n){
    		cin>>a[i]>>b[i]>>c[i]>>d[i];
    		if(a[i]>c[i]||b[i]>d[i])swap(a[i],c[i]),swap(b[i],d[i]);
    	}
    	int l=0,r=LLONG_MAX,ans=0;
    	while(l<=r){
    		int mid=(l+r)>>1;
    		if(check(mid))ans=mid,l=mid+1;
    		else r=mid-1;
    	}
    	cout<<ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    3622
    时间
    1000ms
    内存
    64MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者